本教程带大家初步了解编辑器并且做进一步延伸的探讨。

开篇语

本篇教程适用于未使用过U3D编辑器的初学者以及对编辑器有一定了解的同学进阶。希望能在你成长的路上帮助到你。

本章主要技术点

1.Rect
2.GUI && EditorGUI
3.EditorUtility
4.EditorWindow

Rect

我们通常在untiy window中使用rect表示UI坐标与相对坐标。需要注意的是此处的x/y是相对于零点坐标的偏移

1
2
3
4
5
6
7
8
9
10
public void OnGUI ()
{
Rect r = new Rect ();
r.position = Vector2.zero;
r.width = 100;
r.height = 100;
r.x = 50;
r.y = 50;
GUI.Label (r, "test");
}

案例1

GUI && EditorGUI

我们通常用GUI做显示,下图展示了本质上两种GUI的用法的一致性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Rect r = new Rect ();
r.position = Vector2.zero;
r.width = 100;
r.height = 100;
r.x = 50;
r.y = 50;

Rect r2 = new Rect ();
r2.position = Vector2.zero;
r2.width = 100;
r2.height = 100;
r2.x = 150;
r2.y = 50;

GUI.changed = false;
GUI.Button (r, "click");
if (GUI.changed)
Debug.Log ("chaged");

EditorGUI.BeginChangeCheck ();
GUI.Button (r2, "click2");
if (EditorGUI.EndChangeCheck ())
Debug.Log ("chaged2");

案例2

扩展:自己实现IGUI

简单实现一个Button就是那么简单,你甚至可以自定义一个全新的控件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//实现IGUI接口
public class GUIButton : IGUI
{
public GUIButton (string content, System.Action ac)
{
label.text = content;
Clicked = ac;
}

public GUIContent label = new GUIContent ();

public event System.Action Clicked;

public void OnGUI ()
{
if (GUILayout.Button (label) && Clicked != null)
Clicked ();
}
}

//调用
public class EditorTest:EditorWindow{

GUIButton b = new GUIButton ("test", () => {
Debug.Log ("keyle_xiao");
});

public void OnGUI ()
{
b.OnGUI ();
}
}

案例3

GUILayout && EditorGUILayout

我们通常使用GUILayout来进行界面的布局,理解比较简单 通过beginxx … endxx 代码 实现类型排列的布局。如果非要说这两者有何不同,一个时属于引擎的组建一个是属于编辑器的部分。两者都是UI的subset。

EditorUtility

关于EditorUtility这种XXXXUtility结尾的类有非常多的话题可以聊,这是U3D引擎提供的一些快捷类,帮助我们快速获取或设置一些属性等等。这里我们简单介绍下EditorUtility。

未完成 待续

相关链接

Rect的文档在这里 http://docs.unity3d.com/ScriptReference/Rect.html
自己封装IGUI可参考 http://answers.unity3d.com/questions/601131/editorgui-editorguilayout-gui-guilayout-pshhh-when.html