前言
本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的:
界面详解:
1、Create:创建一个新的空的AB包;
2、Rename:重命名当前选中的AB包(必须选中任意一个AB包后方可生效);
3、Clear:清空当前选中的AB包中的所有资源(必须选中任意一个AB包后方可生效);
4、Delete:删除当前的AB包,同时会自动执行Clear操作(必须选中任意一个AB包后方可生效);
5、Add Assets:将14中被勾选的资源添加到当前选中的AB包(必须选中任意一个AB包后方可生效);
6、Hide Invalid:是否隐藏无效的资源(无法打进AB包中的资源,比如.cs .js等);
7、Hide Bundled:是否隐藏已经打包的资源;
8、Open:打开右侧的Build Path对应的路径,用于在打包完成后,打开路径取出打好的AB包;
9、Browse:浏览并选择新的打包路径;
10、打包对应平台选择;
11、Build:开始打包;
12、当前工程的所有AB包预览,白色为空AB包,蓝色为非空AB包;
13、当前选中的AB包中的所有资源预览(必须选中任意一个AB包后方可生效);
14、当前工程的Asset路径下的资源结构图预览,无效资源和已打包资源显示为灰色,无法被再次选中并打入新的AB包,已打包资源的后面会显示该资源对应的目标AB包;
创建编辑器窗口
首先,我们新建一个类AssetBundleEditor,继承至EditorWindow,那么他将表现为一个编辑器窗口的特征,为其添加一个静态的以便于在外界打开他的方法,并为这个方法添加快捷键触发的功能,%#O 也就对应了快捷键 Ctrl + Shift + O。
编辑器窗口布局
回顾一下我们窗口的布局,先不用考虑其他那些杂七杂八的按钮。
1、横向标题栏,当然这里有两层标题按钮,我们可以看到4区域比2区域上面多了一层,为什么呢,因为上面放不下这么多按钮,所以向下多开辟了一层;
2、一个方形区域,用来显示AB包列表;
3、一个方形区域,用来显示某一AB包中的资源列表;
4、一个方形区域,用来显示整个项目中的资源列表;
首先,我们的布局需求是这样的:
1、标题栏1区域总是在最上方,这个毋容置疑;
2、然后区域2和区域3我们将宽度固定,让他们两个平分这个窗口的高度,为什么这样做呢,因为我不想窗口变小的时候会影响这两个区域的宽度,因为那样会妨碍我看某一个东西的名字,毕竟它的名字可能是足够长的,而区域的高度的话,只要添加一个滚动区域,就不怕被拉伸了;
3、区域4的话,我们让他以左上角为锚点固定,窗口拉伸时,左上角保持不动,因为为了配合区域2和区域3,然后为其添加一个滚动区域就不怕其中的资源过多而导致拥挤了。
那么,想法已经有了,我们开始干吧。
编辑器窗口区域划分
我们已经将窗口划分为了四大模块:标题区域,AB包列表区域,当前AB包资源列表区域,所有资源列表区域。
代码的话,塞到OnGUI中依次绘制就OK了。
完事了!今天的教程结束!
……
好吧,放下菜刀,我觉得我还能再写点。
标题区域
我们先看一下标题区域,将所有的按钮或是其他东西写出来,我们再进行探讨:
我们可以将所有按钮或其他的东西都以绝对位置挨着摆放就可以了,Rename按钮、Clear按钮、Delete按钮、Add Assets按钮等都是针对某一AB包进行操作的,如果当前没有选中AB包的话,这里肯定就要禁用他们的功能,将GUI.enabled = false就是禁用之后的一切控件,遇到GUI.enabled = true的话解除禁用,按钮的摆放的话,这里就没什么难度了,自己拷贝源码编译了看看效果就差不多明白了。
AB包列表区域
这里要怎么解释这段代码?呃我想我最多也只能解释成注释中那样的效果,最难理解的可能就是GUI.BeginScrollView方法中的那三个参数,第一个跟第三个容易搞混,一个表示显示的区域,一个表示可滚动的最大区域,没什么其他好解释的了,最好自己拷贝代码编译了看看效果就熟悉了。
当前AB包资源列表区域
左边的两个区域就排好了,至于为什么上面的代码会是这样的效果,这就是Rect布局的效果,没看明白的话可以改变其中一些数据看一下窗口变化,只要Rect运用得当,还是可以做出一些不亚于GUILayout才能有的布局效果的。
所有资源列表区域
最后一个布局区域,也很简单,原理几乎同上。
OK,我们完成了整个界面的框架(空壳)设计,当然这是一个简单到爆而且极度不美观的界面,不过这无法妨碍我们之后在其中添加一些我们所关心的控件。