实力封装:Unity打包AssetBundle(三)
窗口初现
通过前面的两篇教程和一篇番外,我们已经完全实现了打包的功能。但是使用起来总是觉得有些晦涩别扭,如果不告诉别人怎么使用,对方肯定是一头雾水。
What?你给我的这是啥??
当你亲自演示了如何操作时,对方...
这也就是前面的教程将操作过程写的那么详细的原因(当然,高手请忽略)。
Unity除了提供常规API以外,还提供了一系列窗口编程的API,这就意味着我们可以轻松创建自定义窗口,扩展编辑器功能,可以说是很方便了。今天的任务就是在Unity中创建一个自定义的窗口,通过菜单调出窗口。
如果要在Unity中创建自定义的窗口,我们的脚本需要继承自EditorWindow这个类。然后添加如下代码↓↓
[MenuItem("AssetBundle/Build")]static void Init () {
//创建窗口对象
PackageAssetBundle window = EditorWindow.GetWindow (typeof(PackageAssetBundle)) as PackageAssetBundle;
//显示窗口
window.Show ();
}
PackageAssetBundle是当前我们写的类的名字,现在点击菜单AssetBundle→Build,你就会看到一个窗口跃然屏上。
当然这个窗口里面还空空如也,窗口的名字就是类名。下面先说说GetWindow这个函数↓↓
public static EditorWindow GetWindow(Type t, bool utility = false, string title = null, bool focus = true);
EditorWindow是基类,这个函数的第一个参数是派生类类型,后面三个参数都有默认值,可以填,也可以不填。但是如果填的话,千万不要把第二个参数带入true,相信我!第三个参数是窗口标题,第四个参数表示是否获得焦点。最后函数返回一个窗口对象,调用窗口对象的Show方法,窗口就显示出来了。
设置窗口标题
除了在创建窗口的时候设置标题以外,我们也可以在构造函数或者OnEnable函数中设置窗口标题↓↓
void OnEnable() {
GUIContent title = new GUIContent ("My Window"); this.titleContent = title;
}
OnEnable是基类的消息函数,会在窗口对象创建的时候调用一次。
那么问题来了,如何往窗口中添加控件呢??
别急,基类的消息函数除了OnEnable之外,还有OnGUI,这个函数就是用来绘制窗口控件的,我们可以将要显示的控件在这个函数中创建。
比如我们首先实现这样一个功能:我们在打包的时候需要选择打包输出的文件路径,我们在窗口中添加一个输入框,提示用户输入一个路径。看代码↓↓
string path; //文件路径void OnGUI() {
path = EditorGUILayout.TextField("输入文件路径:", path);
}
EditorGUILayout.TextField函数用来创建一个输入框,第一个参数是输入框前的提示字符,第二个参数是一个字符串变量,这个字符串会显示在输入框中,它的返回值是输入框中的内容。这里我们将返回值和第二个参数都给到path变量,这样path变量中就存储了我们输入的内容。
之前还有一个选择文件路径的功能,这里我们也给加上。只需要在创建一个按钮,当点击按钮的时候执行选择文件的代码就OK了↓↓
string path; //文件路径void OnGUI() {
path = EditorGUILayout.TextField("输入文件路径:", path);
if(GUILayout.Button("选择文件") {
path = UnityEditor.EditorUtility.SaveFolderPanel("选择保存文件夹", "C:/", "");
}
}
GUILayout.Button会创建一个按钮,当按钮被点击时,返回true。
但是这时打开窗口你会发现按钮被创建在输入框的下面,我们希望的是按钮可以和输入框在同一行,我们可以用GUILayout.BeginHorizontal来将它们显示在同一行↓↓
string path; //文件路径void OnGUI() {
GUILayout.BeginHorizontal();
path = EditorGUILayout.TextField("输入文件路径:", path); if(GUILayout.Button("选择文件", GUILayou.width(80)) {
path = UnityEditor.EditorUtility.SaveFolderPanel("选择保存文件夹", "C:/", ""); }
GUILayout.EndHorizontal();
}
好了,现在它们都乖乖的在一行显示了,最后那个Button函数里加了一个限制宽度的参数,否则按钮会很长。
今天就到这儿了,虽然还很简陋,但好歹看到窗口初现了,后面会逐步完善这个窗口。
下期见啦~
实力封装:Unity打包AssetBundle(三)的更多相关文章
- 实力封装:Unity打包AssetBundle(大结局)
→→前情提要:让用户选择要打包的文件←← 大结局:更多选择 Unity打包AssetBundle从入门到放弃系列终于要迎来大结局了[小哥哥表示实在写不动了o(╥﹏╥)o]... 经过上一次的教程,其实 ...
- 实力封装:Unity打包AssetBundle(一)
说明:这是一系列循序渐进的教程,今天先介绍最简单的AssetBundle打包方式. 这是一个由在Unity中需要加载模型而引发出来的一系列坑,为了填坑花了不少时间,如果有需要在Unity中自定义菜单, ...
- 实力封装:Unity打包AssetBundle(番外篇)
前情提要:第二种打包方式. 自定义AssetBundle包扩展名 在之前的教程中,我们已经多次提到过扩展名了,并且也已经说明了如何设置自定义的AssetBundle扩展名.至于为什么还要把它单独拿出来 ...
- 实力封装:Unity打包AssetBundle(二)
→前情提要:Unity最基本的AssetBundle打包方式. 第二种打包方式 Unity提供的BuildAssetBundles API还有一个重载形式,看下面↓↓ public static As ...
- 实力封装:Unity打包AssetBundle(四)
→→前情提要:窗口初现←← 让用户选择要打包的文件 时至今日,我们选择打包文件的方式依然是在Project面板或Hierarchy面板中用鼠标点选.现在既然有了窗口,我们自然希望可以将所有文件罗列在窗 ...
- Unity 5.X扩展编辑器之打包assetbundle
5.x的assetbundle与4.x以及之前的版本有些不同,不过本质是一样的,只不过5.x打包assetbundle更为简单和人性化了,总体来说只需要三个步骤: 第一步:创建打包资源 //这里是一个 ...
- Unity手游之路<十一>资源打包Assetbundle
http://blog.csdn.net/janeky/article/details/17652021 在手游的运营过程中,更新资源是比不可少的.资源管理第一步是资源打包.传统的打包可以将所有物件制 ...
- 【Unity】AssetBundle的使用——打包/解包
最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结运行时用A ...
- Unity打包/读取AssetBundle资源全教程
Unity 资源AssetBundle打包 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
随机推荐
- android-------开发常用框架汇总
响应式编程 RxJava https://github.com/ReactiveX/RxJava RxAndroid https://github.com/ReactiveX/RxAndroid 消息 ...
- fedora21 中lamp的搭建(测试没有问题)
LAMP Stands for Linux,Apache,MySQL and PHP. Most of the websites works with the above combination. T ...
- 封装jsonp
1.写一个类封装jsonp: jsonp(url, params, success, funName) 参数url:请求地址 参数params:请求数据,可以是json对象,或形如&q ...
- Ant Design 日期选择组件RangePicker 选择时间范围后计算范围内的天数。
/** *需求:同年同月,同年不同月(两个月相减大于1,小于1),不同年(两个年相减大于1(是否为闰年),小于1),起止包含的月份及天 */ //首先引入组件 import { DatePicker} ...
- ubuntu 安装国际qq
下载地址::http://pan.baidu.com/s/1nt1Nu6P 解压后,输入终端:suao dpkg -i 解压的文件名称.deb 如果你前面安装过qq,你可以输入sudo dpkg -P ...
- Excel中如何匹配另外一个Excel中的数据
场景: 我在Excel中想展示通过一列匹配到另外Excel中的数据.对于程序员来说,就是left join 出 B表的数据. 但是在Excel中怎么做呢,我又不想每次都在把数据导入到数据库中操作. 这 ...
- 精通Oracle的关键是……(Ask Tom上最经常被问到的问题)(转)
原文地址:http://www.ituring.com.cn/article/37548 这是我在asktom上最经常收到的问题:我需要怎么做才能变成一个专家呢?关于Oracle,有这样的一个关键事物 ...
- python中RabbitMQ的使用(工作队列)
消息可以理解为任务,消息发送者可以看成任务派送者(sender),消息接收者可以看成工作者(worker). 当工作者接收到一个任务,还没完任务时分配者又发一个任务,此时需要多个工作者来共同处理这些任 ...
- Hadoop格式化 From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection exception: java.net.
192.168.11.12:8485: Call From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection excep ...
- WebGoat 8安装、配置、使用教程(CentOS)
一.说明 1.1 背景说明 之前只用过dvwa,听说WebGoat也是类似的平台后,想装来试试有没有什么异同. 看了下载文件,和网上官方的.非官方的安装教程,感觉很多都对不上: 最后发现WebGoat ...