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. flip 翻转效果 css3实现

    1.实现代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UT ...

  2. 利用SQL语句重置数据库中所有表的标识列(自增量)

    可以应用于2种场景: 1.清空所有表中的数据,数据清空后,最好是能够让表中的标识列从1开始记数,所以要重置标识列的当前值. 2.用复制的方式,发布订阅同步数据之后,订阅端的数据不会自动增长,比如自增I ...

  3. iOS动画进阶 - 实现炫酷的上拉刷新动效

    移动端訪问不佳,请訪问我的个人博客 近期撸了一个上拉刷新的小轮子.仅仅要遵循一个协议就能自己定义自己动效的上拉刷新和载入,我自己也写了几个动效进去,以下是一个比較好的动效的实现过程 先上效果图和git ...

  4. 滚动居中效果(frame版)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 主从复制时报:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in t

    centos 6.5 mysql5.7 在从库作stop slave时报: error:ERROR 1794 (HY000): Slave is not configured or failed to ...

  6. 探索Python F-strings是如何工作

    PEP 498 提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings(主要因为这种字符串的第一个字母是f).F-strings提供了一种明确且方便的方式将pyth ...

  7. JavaScript 参考教程

    JavaScript 是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把 JavaScript 能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所 ...

  8. lamp 一键安装

    下载安装(ssh登录服务器,执行如下操作即可,需要用到root用户权限来安装) 源码编译安装 wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz ta ...

  9. C++不让程序一闪而过

    末尾加上System("pause") 不过需要注意,这个只在win32下有效.不具备可移植性.

  10. [svc]centos6系统安装(分区)及其18处调优调优最佳实战

    系统下载 在阿里云下载 可以使用最小化的,也可以使用dvd版(CentOS-6.7-x86_64-bin-DVD1.iso),其中dvd版方便安装过程中选包. 一. 系统安装 1,时区选择 2,磁盘分 ...