前言:今天咱们学习编辑器扩展,你会发现原来unity是通过编辑器扩展做的,我们也可以通过今天编辑器扩展去实现制作自己的插件了,是不是很酷的体验=-=,废话不多说,开始吧~
1.创建一个脚本Test01
(1)设置滑条:
<1>在要修饰的变量前一行添加[Range(最小范围,最大范围)] //取值范围左闭右开
<2>必须是public修饰的变量
(2)序列化:[SerializeField]
<1>必须是private修饰的变量
(3)在检视面板隐藏:[HideInInspector]
(4)添加组件:[RequireComponent(typeof(组件))]
<1>写在脚本的上方
<2>挂载脚本的时候组件被添加
(5)设定游戏对象参数不同情况的选择
1如果a是公有的序列化变量。
1.1如果你想要在面板中看到a,那么用:
public int a;1.2如果你不想在面板中看到a,那么用:
[HideInInspector]
public int a; // 这样a可以在程序中被代码赋值,但不会在面板中看到并手动设置赋值。
2 如果a是私有的序列化变量,你想在面板中读取并保存,那么用:
[SerializeField]
private int a;
3.如果a是私有的序列化变量,你想在面板中读取,但是不保存,那么用:
[HideInInspector]
[SerializedField]
private int a;
public int b { get{ return a; } }
然后在Editor中显示,EditorGUILayout.LabelField("value",game.B.ToString());
4如果a是私有序列化变量,你不想在面板中做任何操作(不想看到,也不想写),但是想要在程序中给它赋值,那么用。
[HideInInspector]
[SerializedField]
private int a;
public int b{ get { return a; } set { a = value; } }
由此可见,常态化都是用public 来注入一个对象,除非特殊需求用 [SerializedField],参考第2条。
参考文章:http://tieba.baidu.com/p/2815933897
2.创建一个脚本Test02
(1)添加菜单
<1>脚本取消继承MonoBehaviour类
<2>引用UnityEditor命名空间
<3>[MenuItem(菜单路径)]
1)菜单路径可以是自定义的
2)菜单路径必须有子菜单,如果没有子菜单会报错
3)菜单路径可以在系统的菜单路径下
<4>在[MenuItem(菜单路径)]的下一行必须有个静态的方法
1)当你点击了菜单路径下的菜单就会执行这个静态的方法,打印“点击”
2)注意:继承了MonoBehaviour才能用print打印;
没继承则使用Debug.Log打印
(2)添加窗口
<1>创建一个Rect数据(矩形数据)
<2>让脚本继承EditorWindow静态类(创建编辑窗口的类)
<3>EidtorWindow静态类
1)创建一个编辑窗口:类名.GetWindowWithRect(窗口类型,窗口位置,是否悬浮,窗口标题);
2)显示窗口:对象.Show();
3.创建脚本Test03,Test04
(1)往检视窗口中添加编辑器
<1>取消继承MonoBehaviour类
<2>引用UnityEditor命名空间
<3>继承Editor类(自定义编辑器类)
<4>自定义编辑器:[CustomEditor(typeof(组件名))]
1)CustomEditor属性告知Unity哪个组件需要表现为编辑器
<5>在编辑器下运行:[ExecuteInEditorMode]
<6>using UnityEditor:
1)Editor类
1.1)检视窗口:OnInspectorGUI()
1.1.1)表现出自定义编辑器默认设置:base.OnInspectorGUI();
1.2)被编辑的目标对象: 编辑的对象=traget;
1.2.1)转换类型:
方法一:类型 对象=target as 类型;
方法二:类型 对象=(类型)target;
2)EditorGUILayout类
2.1)自动排列编辑器界面类
2.2)绘制物体字段:绘制对象=类名.ObjectField(标题,绘制对象,typeof(绘制对象的类型),是否允许指定指定场景物体) as 绘制对象的类型;
2.3)绘制矩形字段:绘制的矩形对象=类名.RectField(标题,绘制的矩形对象);
4.创建脚本Test05
(1)准备工作:
<1>新建一个Editor文件夹,将Test05脚本放在此文件夹下
<2>取消继承MonoBehaviour类
<3>引用UnityEditor命名空间
<4>继承Editor类
<5>自定义编辑器[CustomEditor(typeof(Test04))]
(2)using UnityEditor;
类:CustomEditor、Editor、Handles
<1>Editor类:
1)被编辑的目标:类型 编辑对象=target as 类型
2)场景窗口:OnSceneGUI()
<2>CustomEditor类:
1)自定义编辑器:[CustomEditor(typeof(组件))]
1.1)写在脚本前一行
<3>Handles类
1)开始绘制:类名.BeginGUI();
2)结束绘制:类名.EndGUI();
以上是一组绘制
(3)using UnityEngine;
类:GUILayout
<1>GUILayout类
1)开始绘制指定的区域:类名.BeginArea(Rect类型数据);
2)结束绘制指定的区域:类名.EndArea();
以上是一组绘制
3)绘制文本框:类名.Label(标题);
4)绘制按钮:类名.Button(标题);
最后:以上就是今天全部内容,如有疑问,欢迎咨询,谢谢大家~