拓展编辑器功能--Unity自定义编辑器窗口
2016-07-31 23:15
525 查看
最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾。
新建一个脚本:
写好脚本后保存,回到Unity等待完编译,即可看到以下效果:
Unity编辑器顶部的菜单栏多了一项Extend Windows。
点击弹出的窗体如下:
注意点:
创建编辑器菜单项需要使用MenuItem特性。
针对编辑器功能的代码,需要引入UnityEditor名称空间。
自定义编辑器窗口类需要继承EditorWindow类。
绘制窗口的代码需要写在OnGUI()函数里。
绘制函数通常在GUILayout、EditorGUILayout这两个类中。
绘制函数最后通常含有一个可选的参数GUILayoutOption[],这里暂未深入研究。
重要:绘制函数会有返回值(即本次修改结果),这里在Start()函数里声明了变量用于记录返回结果,因为OnGUI()函数每帧都会被(可能多次)调用,所以应该每次都把上一次的返回结果作为这一次的默认值填入。否则当前的修改会在下一次OnGUI()中恢复为预设值,即修改无效!!!
使用EditorGUILayout.BeginToggleGroup()开启一个选项组,
对应EditorGUILayout.EndToggleGroup()结束一个选项组。
最后,需要在菜单项静态函数中使用EditorWindow.GetWindow()才能实现点击该菜单项弹出一个编辑器窗口,参数是要弹出的编辑器窗口(即类名、类型)。
这是编辑器功能(因为继承的是EditorWindow 类),所以写完脚本
保存好后,回到Unity等待编译完即可看到效果,不需要将该脚本挂载在某个游戏物体上,也不需要点击游戏运行才能看到效果。
新建一个脚本:
using UnityEngine; using System.Collections; using UnityEditor; /// <summary> /// 自定义的编辑器窗口 /// </summary> public class MyWindow : EditorWindow { string myString = "Hello World !"; // 文本内容 bool groupEnabled; // 选项组是否可用 bool myBool = true; // 复选框状态 float myFloat = 2.33f; // 滑动条的值 [MenuItem("Extend Windows/MyWindow")] public static void ShowWindow() { // 显示某个编辑器窗口。传参即是要显示的窗口类型(类名) EditorWindow.GetWindow(typeof(MyWindow)); } void OnGUI() { // 文本 GUILayout.Label("Base Setting"); // 可以编辑,编辑后用同一个变量保存结果 myString = EditorGUILayout.TextField("这是文本", myString); // 开启一组选项 groupEnabled = EditorGUILayout.BeginToggleGroup("Options setting", groupEnabled); // 复选框 myBool = EditorGUILayout.Toggle("这是复选框", myBool); // 滑动条 EditorGUILayout.Slider("这是滑动条", myFloat, 0, 5); // 结束这组选项 EditorGUILayout.EndToggleGroup(); } }
写好脚本后保存,回到Unity等待完编译,即可看到以下效果:
Unity编辑器顶部的菜单栏多了一项Extend Windows。
点击弹出的窗体如下:
注意点:
创建编辑器菜单项需要使用MenuItem特性。
针对编辑器功能的代码,需要引入UnityEditor名称空间。
自定义编辑器窗口类需要继承EditorWindow类。
绘制窗口的代码需要写在OnGUI()函数里。
绘制函数通常在GUILayout、EditorGUILayout这两个类中。
绘制函数最后通常含有一个可选的参数GUILayoutOption[],这里暂未深入研究。
重要:绘制函数会有返回值(即本次修改结果),这里在Start()函数里声明了变量用于记录返回结果,因为OnGUI()函数每帧都会被(可能多次)调用,所以应该每次都把上一次的返回结果作为这一次的默认值填入。否则当前的修改会在下一次OnGUI()中恢复为预设值,即修改无效!!!
使用EditorGUILayout.BeginToggleGroup()开启一个选项组,
对应EditorGUILayout.EndToggleGroup()结束一个选项组。
最后,需要在菜单项静态函数中使用EditorWindow.GetWindow()才能实现点击该菜单项弹出一个编辑器窗口,参数是要弹出的编辑器窗口(即类名、类型)。
这是编辑器功能(因为继承的是EditorWindow 类),所以写完脚本
保存好后,回到Unity等待编译完即可看到效果,不需要将该脚本挂载在某个游戏物体上,也不需要点击游戏运行才能看到效果。
相关文章推荐
- Unity编辑器拓展【自定义窗口】
- 【unity】拓展自定义编辑器窗口(二)
- 拓展自定义编辑器窗口(EditorGUILayout类)
- Unity 自定义编辑器窗口的使用
- Unity创建自定义窗口编辑器
- Unity3D研究院之拓展自定义编辑器窗口
- 拓展自定义编辑器窗口(EditorGUILayout类)
- Unity3D之Shader自定义编辑器功能拓展
- Unity编辑器拓展【视图窗口扩展】
- 【Unity游戏开发之七】Unity利用语法糖添加自定义拓展方法(上)
- Unity添加自定义拓展方法ExternMethod
- unity编辑器学习,创建自己的窗口
- Unity 编辑器扩展自定义窗体
- 【Unity游戏开发之八】Unity利用语法糖添加自定义拓展方法(下)
- 黄聪:如何给wordpress的编辑器添加一个自定义按钮,并且实现插入功能
- 【unity小技巧之三】添加自定义拓展,动态向某个类注入静态函数
- Unity 编辑器启动时运行自定义编辑器脚本
- [Unity] Unity3D研究院编辑器之自定义默认资源的Inspector面板
- unity编辑器拓展
- Unity教程之-Unity3d游戏中自定义贝塞尔曲线编辑器