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. 14.2 事务的ACID属性

    14.2 事务的ACID属性正在更新内容.请稍后

  2. pomelo生命周期回调和组件加入

    一 生命周期回调 生命周期回调可以让开发人员在不同类型的server生命周期中进行详细操作. 提供的生命周期回调函数包含:beforeStartup,afterStartup,beforeShutdo ...

  3. 【五年】Java打怪升级之路

    之前写过一篇帖子.就是关于工作经验分享的,近期非常多人私信我.所以博客这边再分享一次 这几年来,我最大的感想就是一句话:多看.多写.多想.多问.多分享.多优化.多运动... 1.[多看] 读万卷书,行 ...

  4. 关于Csdn水区被占据一事 (2015-08-01)

    例如以下图所看到的 水区被占据 ,假设发贴机不仅仅在水区发贴.也在其他版块也发贴,将不堪设想啊各位. 如今非常多站点也经历过被 注冊机,发贴机,乱炸,是非常可恨的事.可是您想想.为什么注冊机.发贴机会 ...

  5. 基于 bootstrap 的数据展示--bootgrid 样式改动。

    bootgrid 的官网案例 http://www.jquery-bootgrid.com/Examples 官方demo 样式 基于项目须要,取消了一些不须要 的功能,改动了源代码 最后样式成了这样 ...

  6. js经常使用功能代码

    js经常使用功能代码(持续更新): 1---折叠与展开 <input id="btnDisplay" type="button" class=" ...

  7. NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

    本篇文章由:http://xinpure.com/nsurlsessionnsurlconnection-http-load-failed-kcfstreamerrordomainssl-9802/ ...

  8. dbcp2连接池获取数据库连接Connection

    一.先来看看手工创建的方式 public static Connection getConnection() { Connection conn = null; try { Class.forName ...

  9. freeswitch编译java esl

    一.背景假设源代码路径为/home/freeswitch 二.编译安装libesl.a1. cd /home/freeswitch(源代码的根目录) 执行./configure,以便生成必要的Make ...

  10. autoHotKey 一些脚本积累

    新建test.ahk,然后运行即可. #InstallKeybdHook #Persistent Hotstring("EndChars", "`n") ; 设 ...