unity5.4.3p2里面的AssetBundle打包流程

unity5.4.3p2里面的AssetBundle打包流程,相比之前unity4.x的打包简单了许多,Unity4.X中打包的时候需要自己去管理依赖关系,各种BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies(),一不小心手一抖,依赖关系就惨不忍睹。下面简单说说一下unity5.4的步骤。

1.在工程里新建两个prefab,分别为ui1.prefab和ui2.prefab,如下图:

   

   然后选中ui1,在右下角的AssetBundle Setting中,设置ui1的AssetBundleName为ui1,一样的步骤将ui2的AssetBundleName设置为ui2。注意:当把AssetBundleName设置为同一个的时候,将会打进同一个包,这里分开打包

    2.在ui1中引用ui2,具体引用操作很简单,在ui1上挂个脚本,脚本里弄个publish GameObject prefab就好,如下图:


    然后将AssetBundle目录下的资源进行打包,打包过程其实很简单(BuildAssetBundleOptions选择不同的压缩格式,压缩比不一样,在Profiler中SerializedFile大小也不一样,加载后加压的速度也不一样,可酌情考虑使用),过程如下:

[csharp] view plaincopy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using UnityEditor;  
  4. public class CreateAssetBundles : Editor  
  5. {  
  6.     [MenuItem("Tools/Build AssetBundles")]  
  7.     static void BuildAllAssetBundles()  
  8.     {  
  9.         BuildPipeline.BuildAssetBundles(Application.dataPath + "/AssetBundles", BuildAssetBundleOptions.UncompressedAssetBundle,BuildTarget.Android);  
  10.         AssetDatabase.SaveAssets();  
  11.         AssetDatabase.Refresh();  
  12.         Debug.LogWarning("打包成功");  
  13.     }  
  14. }  
打包后的结果如下:


打包的时候,在输出的bundle所在的文件夹内还会生成一个总的manifest文件,叫做[文件夹名].manifest,我们看看都生成了什么文件,


前面三个文件和后面三个文件是新生成的,其实我们用到的也就是这几个文件。在AssetBundles.manifest中我们看到


这里记录了我们打包的所有的assetBundle的信息,其中info_0中记录了ui1中引用了ui2。再看看ui1.manifest文件,


这里也记录了ui1引用了哪些assetBundle。

3.加载assetBundle

   前面提到ui1中引用到了ui2的资源,所以这里分两种方式加载,一种是先加载ui1再加载ui2,另一种是先加载ui2再加载ui1,看看这两种方式有什么区别。

 (1)先加载ui1后加载ui2

[csharp] view plaincopy
  1. void Load()  
  2.    {  
  3.        //加载assetBundleManifest文件    
  4.        AssetBundle assetBundleManifest = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/AssetBundles");  
  5.        if (assetBundleManifest != null)    
  6.        {  
  7.            AssetBundleManifest manifest = (AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");  
  8.   
  9.            //先加载ui1  
  10.            AssetBundle bundle = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/ui1");  
  11.            GameObject obj = bundle.LoadAsset("ui1"as GameObject;  
  12.            if (obj != null)  
  13.            {  
  14.                Instantiate(obj);  
  15.            }  
  16.            //后加载ui1的依赖文件  
  17.            string[] depends = manifest.GetAllDependencies("ui1");  
  18.            AssetBundle[] dependsAssetbundle = new AssetBundle[depends.Length];  
  19.            for (int index = 0; index < depends.Length; index++)  
  20.            {  
  21.                dependsAssetbundle[index] = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/" + depends[index]);  
  22.            }  
  23.        }    
  24.    }    
结果如下图:


所以这里先加载ui1后加载ui1的依赖文件ui2,Relation中的prefab居然没有missing惊恐。我可记得在4.X的版本中必须先要加载依赖文件才行的啊惊恐

(2)在加载依赖文件ui2再加载ui1,

[csharp] view plaincopy
  1. void Load()  
  2.    {  
  3.        //加载assetBundleManifest文件    
  4.        AssetBundle assetBundleManifest = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/AssetBundles");  
  5.        if (assetBundleManifest != null)    
  6.        {  
  7.            AssetBundleManifest manifest = (AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");  
  8.            //加载ui1的依赖文件  
  9.            string[] depends = manifest.GetAllDependencies("ui1");  
  10.            AssetBundle[] dependsAssetbundle = new AssetBundle[depends.Length];  
  11.            for (int index = 0; index < depends.Length; index++)  
  12.            {  
  13.                dependsAssetbundle[index] = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/" + depends[index]);  
  14.            }  
  15.            //加载ui1  
  16.            AssetBundle bundle = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/ui1");  
  17.            GameObject obj = bundle.LoadAsset("ui1"as GameObject;  
  18.            if (obj != null)  
  19.            {  
  20.                Instantiate(obj);  
  21.            }  
  22.              
  23.        }    
  24.    }                                            


这种情况ui2出来可以正常理解了。

(3)只加载ui1,不加载依赖文件ui2

[csharp] view plaincopy
  1. void Load()  
  2.     {  
  3.         //加载assetBundleManifest文件    
  4.         AssetBundle assetBundleManifest = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/AssetBundles");  
  5.         if (assetBundleManifest != null)    
  6.         {  
  7.             AssetBundleManifest manifest = (AssetBundleManifest)assetBundleManifest.LoadAsset("AssetBundleManifest");  
  8.             //加载ui1的依赖文件  
  9.             //string[] depends = manifest.GetAllDependencies("ui1");  
  10.             //AssetBundle[] dependsAssetbundle = new AssetBundle[depends.Length];  
  11.             //for (int index = 0; index < depends.Length; index++)  
  12.             //{  
  13.             //    dependsAssetbundle[index] = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/" + depends[index]);  
  14.             //}  
  15.             //加载ui1  
  16.             AssetBundle bundle = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/ui1");  
  17.             GameObject obj = bundle.LoadAsset("ui1"as GameObject;  
  18.             if (obj != null)  
  19.             {  
  20.                 Instantiate(obj);  
  21.             }  
  22.               
  23.         }    
  24.     }    




这种情况必须missing啊。

so,问题出来了,本测试中使用的是unity5.4.3p2,为何步骤(1)中ui1依赖的文件ui2后加载也能出来?尴尬,暂时不知为何,看官如果知道可否指点一二害羞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa

主成分分析&#xff08;PCA&#xff09;原理详解 2016/12/17 IT技术 主成分分析, 数学 分享到&#xff1a;21原文出处&#xff1a; 中科春哥 一、PCA简介 1. 相关背景 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 是一种统…

【Tensorflow】 Object_detection之训练PASCAL VOC数据集

参考&#xff1a;Running Locally 1、检查数据、config文件是否配置好 可参考之前博客&#xff1a; Tensorflow Object_detection之配置Training Pipeline Tensorflow Object_detection之准备数据生成TFRecord 2、训练模型 PIPELINE_CONFIG_PATH/data/zxx/models/research/date…

R文件报错的原因

一般R文件报错&#xff0c;无非是资源文件错误&#xff0c;图片命名错误&#xff0c;但是编译都会报错&#xff0c;可以很快解决。但是前几天&#xff0c;引入一个第三方aar包后&#xff0c;项目编译正确&#xff0c;但是就是R文件报错&#xff0c;找不到R文件&#xff0c;整个…

[转]Excel数据转化为sql脚本

在实际项目开发中&#xff0c;有时会遇到客户让我们把大量Excel数据导入数据库的情况。这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库。 1 在数据前插入一列单元格&#xff0c;用来拼写sql语句。 具体写法&#xff1a;"insert into t_student (id,name,age…

void Update ( ) 更新 void FixedUpdate ( )

void Update ( ) 更新 void FixedUpdate ( ) 固定更新 相同点&#xff1a;当MonoBehaviour启用时&#xff0c;其在每一帧被调用&#xff0c;都是用来更新的。 异同点&#xff1a;第一点不同&#xff1a; Update()每一帧的时间不固定&#xff0c;即第一帧与第二帧的时间间隔t…

【点分治】luoguP2664 树上游戏

应该是一道中等难度的点分&#xff1f;麻烦在一些细节。 题目描述 lrb有一棵树&#xff0c;树的每个节点有个颜色。给一个长度为n的颜色序列&#xff0c;定义s(i,j) 为i 到j 的颜色数量。以及 现在他想让你求出所有的sum[i] 输入输出格式 输入格式&#xff1a; 第一行为一个整数…

EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#

EasyJoyStick使用以及两种操作杆EasyJoyStick的使用方法&#xff0c;简单的不能再简单Hedgehog Team-》Easy Touch -》Add Easy Touch For C#Hedgehog Team-》Easy Touch -》Extensions-》Adding A New Joystick配置如图&#xff1a;然后看一下配置&#xff0c;我喜欢掌控性强一…

Web渗透实验:基于Weblogic的一系列漏洞

1. 攻击机windows10 192.168.2.104 2. 靶机ip: 192.168.2.109(linux Ubantu) 192.168.2.111(windows2008R264位) 第一步&#xff1a;启动靶机服务 分别为linux和windows windows环境搭建&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/16KyYb1v1rP9uJ6-5MBotVw   提取…

Unity3D 自动打包整个项目(以AssetBundle实现)

需求&#xff1a; 在移动开发中&#xff0c;手动控制资源的加载、释放和热更新&#xff0c;是很有必要的。 而Unity通过AssetBundle可以实现该需求&#xff0c;但是如果项目资源多起来的话一个个手动打包成AssetBundle则很麻烦。 而本文正为此提供一套一键打包的方案。 资源分…

Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑(转载)

转自&#xff1a;https://www.cnblogs.com/ibingshan/p/10334471.html Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑 前言 基于 python27 的 pyc 很容易被反编译&#xff0c;于是想到了pyd&#xff0c;加速运行&#xff0c;安全保护 必要准备 安装cython&#xff1a;…

一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。

一、创建Assetbundle 在unity3d开发的游戏中&#xff0c;无论模型&#xff0c;音频&#xff0c;还是图片等&#xff0c;我们都做成Prefab&#xff0c;然后打包成Assetbundle&#xff0c;方便我们后面的使用&#xff0c;来达到资源的更新。 一个Assetbundle可以打包一个模型&…

【JS】我的JavaScript学习之路(2)

3.从JavaScript页面解析过程看执行顺序 代码(test.html)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/x…

王者荣耀提取攻略

1. 王者荣耀安装后&#xff0c;就将模型等资源解压到SD卡目录里&#xff0c;我们需要找到这个目录。模型资源存储在SD卡中&#xff0c;路径为&#xff1a;【/SDCard/Android/data/com.tencent.tmgp.sgame/files/Resources/AssetBundle/】 2. 2 所有英雄的资源包都在这个目…

Exchange ActiveSyn身份验证类型

http://www.exchangecn.com/html/exchange2010/20110125_316.html 配置 Exchange ActiveSync 身份验证 时间:2011-01-25 11:01来源:Exchange中文站 作者:Exchange中文站 点击:3045次ActiveSync 身份验证是客户端和服务器验证其身份以进行数据传输的过程&#xff0c;本文以示例的…

二 SVN代码冲突的解决

问题&#xff1a; A和B都是最新的代码&#xff0c;A修改了代码提交了&#xff0c;B也修改了代码&#xff0c;但是B提交的时候出现冲突的问题。 解决方案&#xff1a;编辑冲突 解决冲突&#xff1a; 方法一&#xff1a;将文件里面冲突的描述去掉&#xff0c;重新提交 方法二&…

Android7.0反射类找不到的问题

Java中使用反射的地方较多&#xff0c;尤其是各种框架中。最近在Android7.0的项目中遇到个问题很奇怪&#xff0c;反射使用的类找不到了&#xff0c;但是编译的时候没问题啊。然后在代码中使用非反射的方式调用代码也是没有问题的&#xff0c;这时奇怪的现象出现了&#xff0c;…

[转]JSon数据解析的四种方式

转至http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式&#xff0c;json正在逐步取代xml&#xff0c;成为网络数据的通用格式。 有的json代码格式比较混乱&#xff0c;可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验&#xf…

iOS开发UI篇—Quartz2D使用(绘图路径)

1 //1.获取图形上下文 2 CGContextRef ctxUIGraphicsGetCurrentContext(); 3 //2.绘图&#xff08;画线&#xff09; 4 //设置起点 5 CGContextMoveToPoint(ctx, 20, 20); 6 //设置终点 7 CGContextAddLineToPoint(ctx, 200, 300); 8 //渲染 9…

13结构型模式之桥接模式

概念 Bridge 模式又叫做桥接模式&#xff0c;是构造型的设计模式之一。Bridge模式基于类的最小设计原则&#xff0c;通过使用封装&#xff0c;聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象&#xff08;abstraction&#xff09;与行为实现&#xff08;i…

简易中控紫猫插件版(3)压缩包使用说明

1.环境配置脚本运行环境&#xff1a;没什么说的 正常的最新版手机按键 当然还需要 最新的紫猫插件中控运行环境&#xff1a;首先要保证把压缩包的所有php文件都扔到网站的根目录下 必须保证网站的php版本是5.4 不然紫猫插件的php框架会出问题 然后你要知道网站数据库的账号和密…