资源管理是游戏开发的重要环节,Unity中使用AssetBundle可以非常方便地帮我们打包和更新游戏内容,在5系列中,AssetBundle更是方便好用,现在让我们先进行打包吧。
刚说了,5系列打包非常方便,细心的同志可能已经发现,在右下角多出了个AssetBundle标签工具栏,这使用得我们在选择要打包的文件时,不必再像4系列中一样要在Editor运行库脚本中写一堆取得对象的代码了。
那么,这个工具栏是怎么帮我们解决问题的呢?很简单,选中我们的需要的打包的资源(包括场景哦),然后在工具栏编辑和选择对应的标签。左边的AssetBundle是我们要打包的文件存放目录和名字,其中,在目录和名字之间用“/”分开,如“scenes/loaderscene.unity3d”,表示scenes目录下loaderscene.unity3d Bundle文件。后面还有一个Variants变量标签,其实就和后缀差不多(个人理解,有更好的使用请多多指教),但个人一般不推荐使用,而是像前面一样,直接写上后缀更直观方便。如下图:
咱把需要打包的资源都设置好相应的标签,建议至少有一个场景和一个Prefab,以便我们后面测试。
OK,准备工作做好了,一定小代码还是需要的,建立一个Editor文件夹,并建立脚本BuildAssetBundleEditor,内容如下:
1 using UnityEngine;
2 using System.Collections;
3 using UnityEditor;
4 using System.IO;
5
6
7 ///<summary>
8 /// 打包编辑器
9 /// </summary>
10
11 public class MrCBuildAssetBundleEditor : EditorWindow {
12
13
14 /// <summary>
15 /// 获取不同平台下的包裹存储路径
16 /// </summary>
17
18 public static string GetAssetBundlePath(BuildTarget target)
19 {
20 string opp = "";
21
22 opp += Application.persistentDataPath;
23 opp += "AssetBundles/";
24
25 switch (target) {
26 case BuildTarget.iOS:
27 {
28 opp += "iOS/";
29 break;
30 }
31 case BuildTarget.StandaloneOSXUniversal:
32 {
33 opp += "MacOS/";
34 break;
35 }
36 default:
37 {
38 opp += "Others/";
39 break;
40 }
41 }
42
43 //当在硬盘目录结构里不存在该路径时,创建文件夹
44 if (!Directory.Exists(opp))
45 {
46 Directory.CreateDirectory (opp);
47 }
48
49 return opp;
50 }
51
52 [MenuItem("MrCAssetBundles/Build")]
53 public static void CustomBuildAssetBundle()
54 {
55 //包裹存储的路径...
56 string outputPath = MrCBuildAssetBundleEditor.GetAssetBundlePath(EditorUserBuildSettings.activeBuildTarget);
57
58 //输出路径
59 Debug.Log (outputPath);
60
61 //打包过程..
62 BuildPipeline.BuildAssetBundles(outputPath);
63 }
64 }
OK,打包完成后,可以到persistent目录下查看Bundle文件,其中manifest后缀的信息文件可以用文本工具打开查看依赖关系等