实力封装: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 studio 中的快捷键汇总
1.Ctrl + B 跳入/跳出方法或者资源文件.将鼠标光标定位到某个方法或者资源id的调用处,按Ctrl + B,将会跳入该方法或者资源文件内部,功能等同于Ctrl + 鼠标左键.如果将鼠标光标定位 ...
- Mysql中从一张表中的数据添加到另一张表
A为原表 B为要加入的表$sql="insert into B select * from A where id=$id";
- python基础之函数参数,名称空间,以及函数嵌套
函数进阶内容梗概: 1. 函数参数--动态传参 2. 名称空间, 局部名称空间, 全局名称空间, 作⽤用域, 加载顺序. 3. 函数的嵌套 4. gloabal , nonlocal 关键字 1. 函 ...
- 如何设置Git SSH密钥
1. SSH 存储在user/用户名/.ssh文件夹下 生成SSH密钥 $ ssh-keygen -t rsa -C "your_email" 2. 查看生成的公钥 $ cat ~ ...
- IDEA能运行,但是出现红色下划线的问题报 cannot resolve method
能编译通过并运行说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol.原因就是可能没有清除原来的历史缓存,导致一些错误 ...
- java进行url编码和解码
public static String getURLEncoderString(String str) { String result = ""; if (null == str ...
- python-django rest framework框架之视图
视图 :常用 1和4 两种 1. 原始的APIView class IndexView(views.APIView): def get(self, request, *args, **kwargs): ...
- mysql处理以逗号隔开的字段内容
有一个字段保存了CheckBox内容,比如职业目标选择对于数据库字段otWorkgoal,保存了1,2,3,4内容 现在需要使用纯mysql语句,将字段otWorkgoal根据内容,进行翻译成中文的内 ...
- MIR7预制发票扣除已经预制的数量(每月多次预制,未即时过账)
业务场景见抬头,有没有标准的解决方案就不说了,也没去考虑... 这个增强还是SAP老表提供的,感谢,省了不少时间. INCLUDE:LMR1MF6S 最后的位置 ENHANCEMENT ZMIR7_0 ...
- 第 4 章 用 HTML5 建立超链接
HTML 文件中最重要的应用之一就是超链接.—— 当鼠标单击一些文字.图片或其他网页元素时,浏览器会根据其指示载入一个新的页面或跳转到页面的其他位置. 超链接除了可链接文本外,也可链接各种媒体,如声音 ...