Assetbundle为资源包不是资源
打包1:通过脚本指定打包
AssetBundleBuild ab = new AssetBundleBuild
                              {
                                  assetBundleName =
                                      PlayerSettings.bundleVersion + "@" + "zhao",//资源包assets的名字
                                  assetNames = new string[1],  //包里的每个资源的名字
                              };
string outputPath = Path.Combine(Utility.AssetBundlesOutputPath, Utility.GetPlatformName());
 BuildPipeline.BuildAssetBundles(assetBundlePath, new[] { ab });//打包   assetBundlePath保存 路径   打包的资源
打包2:在unity3d中更改打包
在unity3d中会自动检测有更改这个的时候去选择打包所有已经命名的资源,形成一个资源包assetbundle 
BuildPipeline.BuildAssetBundles(assetBundlePath,  BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget);//路径,打包选择的压缩方式,选择打包的指定平台
打包后会生成4个文件(我打包 时的名字是cube.ab后缀名可以自己取,aa,bb,dd都行不影响)
其中cube.ab是assetbundle文件,后缀名为manifest的是一个相当于配置文件一样的,这个就是拿来看看的,不用管(加载时也不需要)
当加载的时候只需要用到cube.ab 这里包含资源和资源的依赖(解释依赖:就是这个资源所需要的东西,比如一个prefab它需要有一个纹理mat,而当这个纹理又依赖一张图)
最后在解释打包后生成的AssetBundle
这个名字也是由我们而定这几个文件的作用和cube.ab差不多
区别在与assetbundle中包含有资源包的依赖关系(是不是发现就是大家所说的总的依赖关系!)
/////////////////////////////////////////////////////////////////////////////////
 
加载1:本地加载(没有依赖的asssetbundle)
        WWW windowswww = new WWW("file://" + Application.dataPath + "/AssetBundle/AssetBundle");//Application.dataPath 当前工程目录
        yield return windowswww;
        AssetBundleManifest windowsasset = windowswww.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest;//这里对于新手来说特别重要!
/*我们去www请求东西的时候是不是会看到上图我断点的地方,mainasset为null
*我们加载的东西不再这里,我们的资源包里是在断点里看不到资源的
*需要通过这样的方式去加载windowswww.assetBundle.LoadAsset("AssetBundleManifest")就是这个AssetBundleManifest
*当分清这个的时候就发现网上其他的教程就完全行的通了,windowsasset 不在为null
*/
        WWW cubewww = new WWW("file://" + Application.dataPath + "/AssetBundle/cube.ab");//加载完总的依赖后,就可以进一步加载我们需要的资源包了
        yield return cubewww;
        GameObject obj = cubewww.assetBundle.LoadAsset("vvvv@.prefab") as GameObject;//然后在加载完资源包后,就可以通过loadasset的方法去load出我们的资源
        Instantiate(obj);
加载2:网络加载(含有依赖一个cube(有prefab,mat,texture))
我因为需要更深的测试所有采用WWW.LoadFromCacheOrDownload的方式加载

WWW www = WWW.LoadFromCacheOrDownload(murl + objname, 2);//murl服务器地址 包名,版本号

重点解释一下版本号和WWW.LoadFromCacheOrDownload这里讲一下这个方法在使用的时候会自行保存到本地
 WWW.LoadFromCacheOrDownload这个方法的的意思是当进行加载的时候会检查本地目录(本地目录为PC上为C:\Documents
and Settings\Administrator\Local Settings\Application
Data\Unity\WebPlayer\Cache\DefaultCompany_XXXX是工程的名字,因为有些人的电脑名字为中文等等,,,然后这个目录不一定都一样,就慢慢找吧,其他平台的我不一一指出了)如果有而且版本号对应,就会优先使用本地的,
而这个版本号:
准备测试
有三个cube  分别为1红色,2黄色,3绿色
版本号
本地资源
服务器资源
服务器状态
结果
0
0
1
1
红,黄
0
红,黄
绿
1
红,黄
绿
2
红,黄
绿
绿

到这往下的测试我就不一一贴出来,

这里可以看出来,版本号在我们打包的时候unity并没有提供去参与打包。
而是在第一次加载的时候加载的时候会写入一个版本号然后存到本地?然后在去请求的时候进行版本号的对比然后在去选择读服务器上的还是读本地的。这点,我也是有进行猜测,高手望指出
        WWW www = LoadWww("AssetBundle");//load是我写方法 WWW www = WWW.LoadFromCacheOrDownload(murl + objname, 0);返回www
        yield return www;
        if (!string.IsNullOrEmpty(www.error))//当这个有信息的时候是错误信息
        {
            Debug.Log("错误信息为:" + www.error);
        }
        else
        {
            AssetBundleManifest assetbundlemani = www.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest;//得到总的依赖
            if (assetbundlemani != null)
            {
                List<String> manifest = assetbundlemani.GetAllDependencies("cube.ab").ToList();//得到这个cube.ab的所有依赖资源包
                foreach (string s in manifest)//进行每个加载
                {
                    WWW sw = this.LoadWww(s);
                    yield return sw;
                    sw.assetBundle.LoadAsset(s);//每个资源都load出来
                }
                WWW objwww = this.LoadWww("cube.ab");//cube资源依赖加载完后
                yield return objwww;
                GameObject assetobj = objwww.assetBundle.LoadAsset("vvvv@") as GameObject;//直接load就可以了
                if (assetobj != null)
                {
                    Instantiate(assetobj);
                }
            }
1,加载总依赖assetbundle
2,load出需要的cube资源包依赖
3,加载cube所依赖的资源
4,加载cube
5,使用cube
在unity3d新的assetbundle打包中,所有的依赖unity3d都帮我们做好,我只要把所要加载的资源和它所依赖的资源加载出来,unity3d也帮我们组合好,直接就可以使用了。

Unity5 AssetBundle打包加载及服务器加载的更多相关文章

  1. Unity5 AssetBundle 打包以及加载

    using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEditor; us ...

  2. [原]unity5 AssetBundle打包

    本文unity版本5.1.3 一.现有的打包教程: 1.http://liweizhaolili.blog.163.com/blog/static/16230744201541410275298/ 阿 ...

  3. Unity3D使用Assetbundle打包加载(Prefab、场景)

    之前有一篇文章中我们相惜讨论了Assetbundle的原理,如果对原理还不太了解的朋友可以看这一篇文章:Unity游戏开发使用Assetbundle加载场景的原理 本篇文章我们将说说assetbund ...

  4. Unity3d 5.x AssetBundle打包与加载

    1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要设置好AssetBundle的名称后,unity会自动将其打包,无需处理其他,唯独需要做的是设置好个AssetB ...

  5. 使用 jQuery Ajax 在页面滚动时从服务器加载数据

    简介 文本将演示怎么在滚动滚动条时从服务器端下载数据.用AJAX技术从服务器端加载数据有助于改善任何web应用的性能表现,因为在打开页面时,只有一屏的数据从服务器端加载了,需要更多的数据时,可以随着用 ...

  6. 我们无法找到服务器加载工作簿的数据模型"的 SharePoint 网站,当您刷新 Excel 2013 工作簿中的数据透视表时出错

    假定您使用 Analysis Services 源在 Microsoft Excel 2013 中创建数据透视表.将 Excel 工作簿上载到 Microsoft SharePoint 网站中.当您尝 ...

  7. vuejs学习之 项目打包之后的首屏加载优化

    vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...

  8. Unity5.X 新版AssetBundle打包控制

    一.什么是AssetBundle 估计很多人只知道Unity的模型之类的东西可以导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载出来用.那么AssetBund ...

  9. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

随机推荐

  1. OFBiz:component-load.xml

    component-load.xml定义了OFBiz的组件载入位置,默认的是通过目录来设置: <component-loader xmlns:xsi="http://www.w3.or ...

  2. Linux-软件包管理-rpm命令管理-查询

    rpm -q httpd 查看apache包是否已经安装 rpm -qa 查看所有已经安装的包rpm -qa | grep httpd 查询包含和apache关键字相关联的所有包信息 rpm -qi ...

  3. Ubuntu 64编译32位程序

    首先要打开64位系统对32位的支持 第一步:确认64为架构的内核 dpkg --print-architecture 输出:adm64 说明已拥有64位架构内核. 第二步:确认打开了多架构支持功能 d ...

  4. 微信公共服务平台开发(.Net 的实现)1-------认证“成为开发者”

    这些代码也就开始认证的时候用一次,以后就不用了: const string Token = "XXXXX";//你的token protected void Page_Load(o ...

  5. 常用RGB颜色表

      作者:张家珩2005-12-02 20:51分类:默认分类     R G B 值   R G B 值   R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF0 ...

  6. 通过XmlDocument读写Xml文档参考地址

    /// <summary> /// 获取一个报表的参数 http://blog.csdn.net/hdhai9451/article/details/12170069 /// </s ...

  7. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  8. jQuery事件:bind、delegate、on的区别

    最近在AngularJS的开发中,遇到一个神奇的事情:我们用到livebox来预览评论列表中的图片, 然而评论列表是由Angular Resource动态载入的.不可思议的是,点击这些动态载入的图片仍 ...

  9. IOS7 隐藏状态栏 (电池栏)

    电池状态栏. //方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用:     if ([self re ...

  10. zend server 和zend studio 最佳实践

    1.zend server 安装好后需要重启下.无论是win还是mac..win不重启组件不能用.mac 不重启守护进程是离线的 2.修改apache配置.的根目录.到zendstudio的工作空间 ...