赞
踩
BuildAssetBundle的完整定义为:
public static AssetBundleManifest BuildAssetBundles(stringoutputPath, BuildAssetBundleOptions assetBundleOptions =BuildAssetBundleOptions.None, BuildTarget targetPlatform =BuildTarget.WebPlayer)
具体步骤如下:
1.在Unity的Assets文件夹下选中一个资源,然后在其Inspector视图下方设置AssetBundle名称,如图所示。
2.在Assets文件的Editor文件夹(如果文件夹不存在就创建一个)中创建一个c#脚本,并编辑如下:
- using UnityEngine;
- using UnityEditor;
- public class ExportAssetBundles : MonoBehaviour {
-
- [MenuItem("Custom Editor/Buile AssetBunldes")]
- static void CreateAssetBunldesMain()
- {
- //输出路径为Assets下的StreamingAssets文件夹(确定存在该路径)
- BuildPipeline.BuildAssetBundles("Assets/StreamingAssets");
- }
- }
3.保存编辑好的脚本,然后再单击菜单栏中Custom Editor→Build AssetBunldes选项,即可在输出的路径中看到打包的AssetBundle,脚本会对工程里面所有的AssetBundle进行打包,如图所示。
4.如果要将多个资源一起打包,只要将它们的AssetBundle名称设置成一样就可以了。
5.AssetBundle的增量式打包仅重新打包发生变化变化的AssetBundle,当Assets文件发生变化或TypeTree发生变化时才会重新打包。
BuildPlayer完整定义为:
public static stringBuildPlayer(string[] levels, string locationPathName, BuildTarget target,BuildOptions options)
参数 | 解释说明 |
levels | 包括在build里的场景,如果空,当前打开的场景将被编译。路径是相对于项目文件夹(例:Assets/MyLevels/MyScene.unity)。 |
locationPathName | 将被编译应用程序的路径,必须包括所有必要的文件扩展名。 |
target | 用于指定要编译的BuildTarget。 |
options | 额外的编译选项,多个选项可以组合在一起,例如是否运行哪种播放器。 |
- // Build a folder containing unity3d file and html file
- [MenuItem ("Build/BuildWebplayer")]
- static function MyBuild()
- {
- var levels : String[] = ["Assets/Scene1.unity", "Assets/Scene2.unity"];
- BuildPipeline.BuildPlayer( levels, "WebPlayerBuild",
- BuildTarget.WebPlayer, BuildOptions.None);
- }
BuildAssetBundleOptions选项
在创建AssetBundle文件的时候,Unity提供了若干个创建选项,每个选项的作用描述如下:
· None
构件AssetBundle没有任何特殊的选项。
· DisableWriteTypeTree
在AssetBundle中不包含类型信息。需要注意的是,如果要将AssetBundle发布到Web平台上,则不能使用该选项。
· DeterministicAssetBundle
使每个Object具有唯一不变的hash ID,可用于增量式发布AssetBundle。
· UncompressedAssetBundle
不进行数据压缩。如果使用该选项,因为没有压缩/解压缩的过程,AssetBundle的发布和加载会更快,但是AssetBundle也会更大,导致下载速度变慢。
· ForceRebuildAssetBundle
强制重新Build所有的AssetBundle。
· IngoreTypeTreeChanges
忽略TypeTree的变化,不能与DisableTypeTree同时使用。
· AppendHashToAssetBundleName
附加Hash到AssetBundle名称中。
BuildTarget选项
目标的构建平台。
AssetBundle在不同平台之间是不完全兼容的,在多个独立平台构件(包括webplayer)的AssetBundle可以在这些平台上加载,但并不能在IOS和Android上加载,这需要单独
指定它们的BuildTarget。此外,Android和IOS之间也不能相互兼容。
在Unity5.0以后,Unity会自动处理Assets之间的依赖关系,并把这种依赖关系Build到AssetBundle之中,不再需要通过PopAssetDependencies()/PushAssetDependencies()来处理依赖关系,Unity处理Assets的依赖的关系如图所示。
Unity提供了Manifest文件向用户展示这些依赖关系,在处理Assets的依赖关系时不再需要重新打包整个依赖链。例如:
在Editor模式下,Unity为每个AssetBundled都会生成一个Manifest文件,在
Manifest文件中包含:
AssetBundle Manifest提供了以下访问接口:
AssetBundle Manifest示例:
- //manifestPath为manifest文件路径.
- WWW wwwManifest = new WWW(manifestPath);
- yield return wwwManifest;
- AssetBundle manifestBundle = wwwManifest.assetBundle;
- AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
- manifestBundle.Unload(false);
- string[] allAssetBundles = manifest.GetAllAssetBundles();
- //assetBundleName为assetbundle名称.
- string[] depedentAssetBundles = manifest.GetAllDependencies(assetBundleName);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。