Unity3d之AssetBundle打包与读取

一、创建Assetbundle

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

       一个Assetbundle可以打包一个模型(这里的模型不单单指的是预制模型,可以是Project视图下的任何东西),也可以是多个模型,但两种打包方式占用的空间不一样。

      比如我打包三个一样的模型(只不过他们的脚本不一样创建三个空的GameObject(One,Two,Three),分别挂载脚本One,Two,Three)。如果我为每个模型单独打包生成One,Two,Three三个Assetbundle,其所占的空间是A,B,C,但是A+B+C != D.由此可知想通的资源尽可能的打包到一起,他们共用一套资源。不相同的模型尽量分开打包。



二、分开打包(注意这个脚本必须放在Editor文件夹内,Editor文件夹没有的话需自己创建)

[csharp] view plaincopy
print?
  1. /// <summary>  
  2. /// 将选中的预制分别打包  
  3. /// </summary>  
  4. [MenuItem("AssetBundleDemo/Create AssetBundles By themselves")]  
  5. static void CreateAssetBundleThemelves(){  
  6.     //获取要打包的对象(在Project视图中)  
  7.     Object[] selects = Selection.GetFiltered (typeof(Object),SelectionMode.DeepAssets);  
  8.     //遍历选中的对象  
  9.     foreach(Object obj in selects){  
  10.         //这里建立一个本地测试  
  11.         //注意本地测试中可以是任意的文件,但是到了移动平台只能读取路径StreamingAssets里面的  
  12.         //StreamingAssets是只读路径,不能写入  
  13.         string targetPath = Application.dataPath + "/AssetBundleLearn/StreamingAssets/" + obj.name + ".assetbundle";//文件的后缀名是assetbundle和unity都可以  
  14.         if(BuildPipeline.BuildAssetBundle(obj,null,targetPath,BuildAssetBundleOptions.CollectDependencies)){  
  15.   
  16.             Debug.Log(obj.name + "is packed successfully!");  
  17.         }else{  
  18.             Debug.Log(obj.name + "is packed failly!");  
  19.         }  
  20.     }  
  21.     //刷新编辑器(不写的话要手动刷新,否则打包的资源不能及时在Project视图内显示)  
  22.     AssetDatabase.Refresh ();  
  23. }  

SelectionMode.DeepAssets

这个选择模式意味着如果选择中包含多个文件,那么他将包含这个文件视图中的所有资源。

他还有其他的各种选项(以下是官方文档)

SelectionMode

Description

SelectionMode can be used to tweak the selection returned by Selection.GetTransforms.

The default transform selection mode is: SelectionMode.TopLevel | SelectionMode.ExcludePrefab | SelectionMode.Editable.

UnfilteredReturn the whole selection.
TopLevelOnly return the topmost selected transform. A selected child of another selected transform will be filtered out.
DeepReturn the selection and all child transforms of the selection.
ExcludePrefabExcludes any prefabs from the selection.
EditableExcludes any objects which shall not be modified.
AssetsOnly return objects that are assets in the Asset directory.
DeepAssetsIf the selection contains folders, also include all assets and subfolders within that folder in the file hierarchy.

最核心的方法:BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)

参数1:它只能放一个对象,因为我们这里是分别打包,所以通过循环将每个对象分别放在了这里。

参数2:可以放入一个数组对象。

参数3:要打包到的路径

参数4:默认情况下打的包只能在电脑上用,如果要在手机上用就要添加一个参数。

Android上:

BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies,BuildTarget.Android)

IOS上:

BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies,BuildTarget.iPhone)

另外,电脑上和手机上打出来的Assetbundle不能混用,不同平台只能用自己的。

三、一起打包

[csharp] view plaincopy
print?
  1. /// <summary>  
  2. /// 将选中的预制打包到一起  
  3. /// </summary>  
  4. [MenuItem("AssetBundleDemo/Create AssetBundles Together")]  
  5. static void CreateAssetBundleTogether(){  
  6.     //要打包的对象  
  7.     Object[] selects = Selection.GetFiltered (typeof(Object),SelectionMode.DeepAssets);  
  8.     //要打包到的路径  
  9.     string targetPath = Application.dataPath + "/AssetBundleLearn/StreamingAssets/Together.assetbundle";  
  10.     if(BuildPipeline.BuildAssetBundle(null,selects,targetPath,BuildAssetBundleOptions.CollectDependencies)){  
  11.         Debug.Log("Packed successfully!");  
  12.   
  13.     }else{  
  14.         Debug.Log("Packed failly!");  
  15.     }  
  16.     //刷新编辑器(不写的话要手动刷新)  
  17.     AssetDatabase.Refresh ();  
  18. }  


四、读取

[csharp] view plaincopy
print?
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class ReanAssetbundle : MonoBehaviour {  
  5.   
  6.     //不同平台下StreamingAssets的路径是不同的,这里需要注意一下。  
  7.     public static readonly string m_PathURL =  
  8.         #if UNITY_ANDROID  
  9.         "jar:file://" + Application.dataPath + "!/assets/";  
  10.         #elif UNITY_IPHONE  
  11.         Application.dataPath + "/Raw/";  
  12.         #elif UNITY_STANDALONE_WIN || UNITY_EDITOR  
  13.         "file://" + Application.dataPath + "/AssetBundleLearn/StreamingAssets/";  
  14.         #else  
  15.         string.Empty;  
  16.         #endif  
  17.   
  18.     void OnGUI(){  
  19.         if(GUILayout.Button("加载分开打包的Assetbundle")){  
  20.             StartCoroutine(LoadGameObjectPackedByThemselves(m_PathURL + "One.assetbundle"));  
  21.             StartCoroutine(LoadGameObjectPackedByThemselves(m_PathURL +  "Two.assetbundle"));  
  22.             StartCoroutine(LoadGameObjectPackedByThemselves(m_PathURL + "Three.assetbundle"));  
  23.   
  24.         }  
  25.           
  26.         if(GUILayout.Button("加载打包在一起的Assetbundle")){  
  27.             StartCoroutine(LoadGameObjectPackedTogether(m_PathURL + "Together.assetbundle"));  
  28.         }  
  29.           
  30.     }  
  31.     //单独读取资源  
  32.     private IEnumerator LoadGameObjectPackedByThemselves(string path){  
  33.         WWW bundle = new WWW (path);  
  34.         yield return bundle;  
  35.   
  36.         //加载  
  37.         yield return Instantiate (bundle.assetBundle.mainAsset);  
  38.         bundle.assetBundle.Unload (false);  
  39.     }  
  40.   
  41.     IEnumerator  LoadGameObjectPackedTogether (string path)  
  42.     {  
  43.         WWW bundle = new WWW (path);  
  44.         yield return bundle;  
  45.   
  46.         Object one = bundle.assetBundle.Load ("One");  
  47.         Object two = bundle.assetBundle.Load ("Two");  
  48.         Object three = bundle.assetBundle.Load ("Three");  
  49.   
  50.         //加载  
  51.         yield return Instantiate (one);  
  52.         yield return Instantiate (two);  
  53.         yield return Instantiate (three);  
  54.         bundle.assetBundle.Unload (false);  
  55.     }  
  56. }  

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

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

相关文章

unity3d 各个目录的意思

1.首先&#xff0c;你得理解Unity中各个目录的意思&#xff1f; 我这里说的是移动平台&#xff08;安卓举例&#xff09;&#xff0c;读&#xff0c;写。所谓读&#xff0c;就是你出大版本的包之后&#xff0c;这个只读的话&#xff0c;就一辈子就这些东西了&#xff0c;不会改…

asp.net core根据用户权限控制页面元素的显示

asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源&#xff0c;显示不同的内容&#xff0c;之前做了一个 AccessControlHelper 的项目&#xff0c;就是解决这个问题的。 asp.net core 支持 TagHelper 和 基于 …

Java面向对象(二)

source:http://blog.java1234.com/index.html?typeId1 Java类的继承 1&#xff0c;继承定义以及基本使用 定义&#xff1a;子类能够继承父类的属性和方法&#xff1b; 注意点&#xff1a;Java中只支持单继承&#xff1b; 私有方法不能继承&#xff1b; 2&#xff0c;方法重写 …

游戏通讯方式

农药自从上线以来&#xff0c;依靠着强大的产品力以及腾讯的运营能力&#xff0c;在游戏市场上表现可谓是风生水起&#xff0c;根据第三方的调研数据显示&#xff0c;《王者荣耀》渗透率达到22.3%&#xff0c;用户规模达到2.01亿人&#xff0c;每日的日活跃用户&#xff08;DAU…

小小c#算法题 - 3 - 字符串语句反转

题目&#xff1a;反转语句。 如I love Beijing! 反转后输出 !Beijing love I 特点是指反转单词的顺序&#xff0c;其他字符&#xff08;这个可以自己指定&#xff09;不反转。且不能用内置函数&#xff0c;如Split和Substring。 分析&#xff1a;我们需要保证一个单词的字…

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

unity5.4.3p2里面的AssetBundle打包流程&#xff0c;相比之前unity4.x的打包简单了许多&#xff0c;Unity4.X中打包的时候需要自己去管理依赖关系&#xff0c;各种BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()&#xff0c;一不小心手一抖&…

主成分分析(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;本文以示例的…