实力封装:Unity打包AssetBundle

Posted huwenya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实力封装:Unity打包AssetBundle相关的知识,希望对你有一定的参考价值。

→→前情提要:窗口初现←←

让用户选择要打包的文件

时至今日,我们选择打包文件的方式依然是在Project面板或Hierarchy面板中用鼠标点选。现在既然有了窗口,我们自然希望可以将所有文件罗列在窗口中,然后在窗口中进行选择,今天就来实现这一功能。

既然要显示所有的文件,我们就必须首先知道工程目录下都有哪些文件,并获取它们的路径。网上关于递归获取某一目录下的所有文件的例子有很多,这里就不细说了,但是要注意过滤掉.meta的文件,这是Unity为每个资源文件自动生成的,里面存储了资源的GUID,Unity就是通过这个GUID来引用资源的。Unity的资源文件都放在Assets文件夹下,打包的API也只能打包这个文件夹下的文件。

我们将获取出来的所有资源文件的相对路径(Assets开头的文件路径)都存放到一个string链表中。这个链表可以按如下定义,此外还需要定义一个和链表同样长度的bool型数组,以及一个Vector2类型的向量↓↓

  List<string> assetsPath = new List<string> ();
  bool[] flags = new bool[assetsPath.Count];
  Vector2 scallPos;

然后在OnGUI函数中加入如下代码↓↓

  
  GUILayout.Space (20);
 GUILayout.Label("Select the Files you want to package:");
 scallPos = EditorGUILayout.BeginScrollView (scallPos, GUILayout.Height(300));
 foreach (int i = 0; i < assetsPath.Count; i++) {
     string lable = Path.GetFileName (assetsPath[i]);
     flags[i] = EditorGUILayout.ToggleLeft (lable, flags[i]);
 }
 EditorGUILayout.EndScrollView ();

点击菜单运行窗口,已经能看到效果了,还不错。
技术分享图片

 

几点说明↓↓

  1. GUILayout.Space(int)用来画出一个空白区域,主要是为了让控件之间间隔大一点,不至于太挤。

  2. EditorGUILayout.BeginScrollView可以创建一个滚动视图,必须和EndScrollView一起使用,当资源文件很多很多的时候,让它们滚动起来是很有必要的。BeginScrollView的第一个参数是一个Vector2向量,表示滚动位置,同时返回值也必须赋回给同一个变量,否则视图是滚不动的,这也就是为什么要定义一个scrollPos变量的原因。第二个参数给滚动区域限制了一个高度。

  3. Path.GetFileName用来获取一个路径中的文件名(包括扩展名),Path类还有很多关于路径操作的静态函数,有兴趣可以自己挖掘。

  4. EditorGUILayout.ToggleLeft创建一个框在左,文字在右的复选框。第一个参数是框旁边要显示的文字,第二个参数是一个bool变量,用来表示复选框的选中状态。同样,函数返回值也要付给这个参数,否则复选框是不能选择的,所以我们要定义一个和assetsPath同样长的bool型数组。

 

基本的操作就这些了,有了这些基础,做出其他花样就不是问题了。

下期见啦~





以上是关于实力封装:Unity打包AssetBundle的主要内容,如果未能解决你的问题,请参考以下文章

实力封装:Unity打包AssetBundle(番外篇)

实力封装:Unity打包AssetBundle

unity3d开发2d游戏中Assetbundle有啥作用

unity打包AssetBundle包的几种压缩方式介绍

unity2018怎么打包assetbundle?

Unity5 AssetBundle 打包和下载