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. js 向上取整、向下取整、四舍五入

      js 向上取整.向下取整.四舍五入 CreateTime--2018年4月14日11:31:21 Author:Marydon // 1.只保留整数部分(丢弃小数部分) parseInt(5.12 ...

  2. 〖Linux〗(2013.08.02)使用ctag+cscope查看Android源代码

    1. 安装ctags和cscope sudo apt-get install -y exuberant-ctags cscope 2. vimrc中的配置 """&quo ...

  3. Servlet 过滤器 Filter

    过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法: 下面是对所有编码过滤器 package filter ...

  4. 【php写日志】php将日志写入文件

    php 写内容到文件,把日志写到log文件 <?php header("Content-type: text/html; charset=utf-8"); /******** ...

  5. 【apache】apache模拟高并发请求

    目的:测试程序的性能 运用的工具是apache的ab工具,装有apache服务器的一般都有ab工具. lamp命令: ab -c 10 -n 100 "http://a.ilanni.com ...

  6. OSSSME - 开源软件助力中小企业发展

    怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ [2013-8-2] 由于同时更新2个站点的信息比较繁琐,今后所有和iDempiere. ...

  7. Asp.Net Core + SignalR 实现实时通信

    一.搭建项目 1.创建一个ASP.NET Core MVC 项目 2.nuget 下载和安装 MicroSoft.AspNetCore.SignalR vs提示版本冲突 这时我们选择低版本即可 二.S ...

  8. 详解 boost 库智能指针(scoped_ptr<T> 、shared_ptr<T> 、weak_ptr<T> 源码分析)

    一.boost 智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源.关于RAII的讨论可以参考前面的文章.在使 ...

  9. 温故而知新 js 点击空白处关闭气泡

    诀窍1:使用el.contains(e) 来判断点击的区域诀窍2:使用mouseup 诀窍3:完成之后,移除事件 showpopover (e) { this.popover = !this.popo ...

  10. <class 'Salesman.admin.UsrUserAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[0][1]'.

    ieldsets = ( ['Main', { 'fields': ('user_name', 'real_name', 'concat_name','phone_no','charge_person ...