实力封装: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 ...
随机推荐
- LeetCode--409--最长回文串
问题描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字 ...
- javascript使用误区(switch、this)
1.switch 语句会使用恒等计算符(===)进行比较: 以下实例由于类型不一致不会执行 alert 弹窗: var x = "10"; switch(x) { case 10: ...
- python记录_day23 正则表达式 re模块
一. 正则表达式 使用python的re模块之前应该对正则表达式有一定的了解 正则表达式是对字符串操作的一种逻辑公式.我们一般使用正则表达式对字符串进行匹配和过滤. 正则的优缺点: 优点:灵活, 功能 ...
- win10更新后,可以远程桌面ping也没问题,但是无法访问共享文件夹的解决方法
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters 1.在键盘输入WIN+R键, ...
- hdu-4180-exgcd
RealPhobia Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- CRM WEB UI 04明细界面添加按钮
好了,这个是个人测试玩的,略风骚...请自行鉴阅 1.明细的组件控制器中增加全局控制属性字段: 2.概览页中工具栏相关方法,重定义GET_BUTTONS METHOD IF_BSP_WD_TOOLBA ...
- Linux 命令查询工具
http://man.linuxde.net/traceroute http://man.linuxde.net/ping http://man.linuxde.net/nslookup 等等
- express中app.get和app.use的解析
app.get(path,callback)中的callback只能是函数 app.use(path,callback)中的callback既可以是router对象又可以是函数 当其是router对象 ...
- 【转】JS常用函数整合库 lutils
lutils 此工具包是在 outils 的基础上,加上个人平时收集的代码片段进行的二次整合 outils的GitHub:https://github.com/proYang/outils/blob/ ...
- 使用外置的Servlet容器
嵌入式Servlet容器: 优点:简单.便捷 缺点:默认不支持JSP.优化定制比较复杂(使用定制器[ServerProperties.自定义EmbeddedServletContainerCustom ...