Unity3d编辑器拓展
来源:互联网 发布:淘宝客贷怎么才能贷款 编辑:程序博客网 时间:2024/05/16 09:09
http://blog.sina.com.cn/s/blog_471132920101n8cr.html
原创文章如需转载请注明:转载自风宇冲Unity3D教程学院
Unity Editor编辑器拓展一般用3个类
一 ScriptableObject
ScriptableObject,继承自UnityEngine.Object,可用于在编辑器中存储数据,这里用于承载导航菜单栏的小功能。(无窗口)
一般有3步
1 类继承ScriptableObject
2 静态函数前加[MenuItem("dir/name")]
3 在该函数里用Selection等处理
- using
UnityEngine; - using
UnityEditor; - using
System.Collections; - public
class AddChild : ScriptableObject - {
-
[ ( "LSY/AddChild ")]^n -
void MenuAddChild() -
{ -
transforms = Selection.GetTransforms(SelectionMode.TopLevel| SelectionMode.OnlyUserModifiable); -
-
transform in transforms) -
{ -
newChild = newGameObject("_Child"); -
= transform; -
} -
} - }
二 EditorWindow
用于自制窗口
继承自ScriptableObject,在UnityEditor命名空间下。
优点:可以加入Unity的排版。
缺点:容易处在其他窗口之后,看不见
一般有3步
1 类SomeClass继承EditorWindow 类名即窗口名
2 静态函数前加[MenuItem("dir/name")],函数体内创建窗口
SomeClass sc = (SomeClass)EditorWindow.GetWindow ( typeof ( SomeClass));
3 OnGUI函数里写窗口结构
填写框 myString = EditorGUILayout.TextField ( "Text Field ", myString);
滑动条 myFloat = EditorGUILayout.Slider ( "Slider", myFloat, - 3, 3);
单选框 myBool = EditorGUILayout.Toggle ( "Toggle", myBool);
可选区域如下图,当勾选时,才能编辑ToggleGroup里的内容
groupEnabled = EditorGUILayout.BeginToggleGroup ( "Optional Settings ", groupEnabled);
//content
EditorGUILayout.EndToggleGroup();
//content
EditorGUILayout.EndToggleGroup
- using
UnityEngine; - using
UnityEditor; - public
class MyWindow : EditorWindow{ -
myString = "HelloWorld "; -
groupEnabled; -
myBool = true; -
myFloat = 1.23f; -
[ ( "LSY/MyWindow ")] -
void Init () { -
Get existing open window or if none, make a new one: -
window = MyWindow)EditorWindow.GetWindow( ( typeof( MyWindow)); -
} -
-
OnGUI () { -
( "BaseSettings ",EditorStyles.boldLabel); -
= EditorGUILayout.TextField( "TextField ",myString); -
= EditorGUILayout.BeginToggleGroup( "OptionalSettings ",groupEnabled); -
= EditorGUILayout.Toggle( "Toggle",myBool); -
= EditorGUILayout.Slider( "Slider",myFloat, - 3,3); -
(); -
} - }
三 Editor
用于自定义Inspector面板,
继承自ScriptableObject,在UnityEditor命名空间下。必须在起名为Editor的文件夹下。
如下代码。
1 第5行的MyMain 一定对应要修改面板的类
2 类名任意
3 override void OnInspectorGUI(), override关键字必须有。
而里面的排版 组件和EditorWindow 一致。
- using
UnityEngine; - using
System.Collections; - using
UnityEditor; - [CustomEditor(typeof(MyMain))]
- public
class MyMainEditor:Editor { -
override void OnInspectorGUI() { -
( "BaseSettings ",EditorStyles.boldLabel); -
myTarget = MyMain)( target; -
= EditorGUILayout.IntSlider("CoinsNum ",myTarget.coin, 1, 10); -
-
} - }
总结:
编辑器拓展。
基础类是ScriptableObject,配合MenuItem,能做基本选择处理
EditorWindow和Editor
相同点
1 均继承自ScriptableObject
2 组件均来自 GUILayout EditorGUILayout和EditorGUI。(GUILayout主要用到的是Label和Button)
不同点
1 EditorWindow是显示窗口,而Editor是做自定义Inspector
EditorGUILayout和EditorGUI的区别在于,EditorGUI是手动排版而EditorGUILayout是自动排版
最后简单介绍下ScriptableWizard,
继承自EditorWindow。主要用来做向导。有2个按钮,一个是Create,另一个是Other,有兴趣的朋友可以看最后的参考文章。
OnWizardUpdate
OnWizardCreate
OnWizardOtherButton
优点:有定制功能,并且永远处于最上层显示
如果有EditorWindow想要最上层显示的话, 把继承EditorWindow直接换成ScriptableWizard,把
MyWinClass window = ( MyWinClass)EditorWindow.GetWindow ( typeof(MyWinClass));
替换为
ScriptableWizard.DisplayWizard<</span>MyWinClass > ( "Title");
ScriptableWizard.DisplayWizard<</span>
即可。
Reference:
Unity3D之Editor扩展学习——四大名捕闹京东
0 0
- Unity3d编辑器拓展
- UNITY3D拓展编辑器 - 目录
- 雨松 Unity3D拓展编辑器
- Unity3D之Shader自定义编辑器功能拓展
- 对于Unity3D编辑器拓展的一些小结
- Unity3D之Shader自定义编辑器功能拓展
- UNITY3D拓展编辑器 - InspectorEditor(属性编辑器)1
- Unity3D研究院之在开始学习拓展编辑器
- Unity3D笔记第十八天——编辑器的拓展
- Unity3D研究院之在开始学习拓展编辑器(一)
- unity3d 拓展类方法
- unity编辑器拓展
- Unity编辑器拓展<一>
- Unity编辑器拓展<二>
- unity拓展编辑器
- U3D编辑器拓展
- 【Unity&拓展编辑器&插件】开始插件,拓展编辑器教程
- 编辑器拓展二:序列化与编辑器
- 还未理解到php方法()
- java面向对象--06
- java音乐播放之IO流处理
- 二值图像的腐蚀和膨胀
- js简单运动
- Unity3d编辑器拓展
- 【黑马程序员】----java基础---反射
- 微信公众平台DIY文章排版格式
- IT人职业规划(绝对给力)
- 从此开始 第一篇(定义字符数组放字符串时注意注意字符数组的长度)
- 日子前的天数
- 黑马程序员------C语言基础 结构体、枚举及关键字 typedef
- 【CODEFORCES】 A. Dreamoon and Sums
- android getViewTreeObserver的使用