编者注
由于UnityEditor的菜单必须是静态的,而不能动态生成菜单,对于从服务器调取内容数据,进行列表显示就成为了问题。则需要找到新的GUI入口。
Window
Window接入与显示
继承EditorWindow
public class PreVizWindow : EditorWindow
{
PreVizWindow()
{
this.titleContent = new GUIContent("TestWindow");
}
...
}
菜单调用入口
// 添加菜单
[MenuItem("PreViz/TestWindow")]
static void ShowWindow()
{
Debug.Log("PreViz/TestWindow");
EditorWindow.GetWindow(typeof(PreVizWindow));
}
运行显示
Window内部绘制
需要在class内创建OnGUI方法,这样在调取Window时,才会调用该函数内的
void OnGUI()
{
// 竖向绘制
EditorGUILayout.BeginVertical();
添加绘制内容...
EditorGUILayout.EndVertical();
}
EditorGUILayout.MinMaxSlider
private float minValue = -10;
private float maxValue = +10;
private float minLimit = -100;
private float maxLimit = +100;
void OnGUI()
{
...
EditorGUILayout.MinMaxSlider(ref minValue,ref maxValue, minLimit, maxLimit);
EditorGUILayout.Curve
private AnimationCurve animationCurve = new AnimationCurve();
void OnGUI()
{
...
animationCurve = EditorGUILayout.CurveField(animationCurve);
...
}
EditorGUILayout.PasswordField
password = EditorGUILayout.PasswordField("123456");
EditorGUILayout.Popup
string[] options = new string[] { "中文测试","Cube", "Sphere", "Plane" };
index = EditorGUILayout.Popup(index, options);
EditorGUILayout.PrefixLabel
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("PrefixLabel:");
intField = EditorGUILayout.IntField(intField);
EditorGUILayout.EndHorizontal();
EditorGUILayout.RectField
// Rect is Rectangular position in 2D plane
rect = EditorGUILayout.RectField(rect);
EditorGUILayout.LabelField
EditorGUILayout.SelectableLabel
// ReadOnly Text cannot copy
EditorGUILayout.LabelField("LabelField:123,456,789");
// Readonly text can copy
EditorGUILayout.SelectableLabel("SelectableLabel:123,456,789");
EditorGUILayout.Space
添加空格,内部也支持输入像素。
EditorGUILayout.Space();
EditorGUILayout.TextField
private String value = "value";
private String tag = "tag";
private String text = "text";
void OnGUI()
{
...
// Field
// Unity tag for clasify the gameobject
// 注意:unity的assetbundle的tag仅仅保存顺序,而不是tag,放弃使用tag,是对程序安全的管理
tag = EditorGUILayout.TagField("TagField:", tag);
text = EditorGUILayout.TextArea(text);
value = EditorGUILayout.TextField("TextField:", value);
...
}
EditorGUILayout.Toggle
EditorGUILayout.ToggleLeft
Boolean checkbox = false;
Boolean checkboxLeft = false;
void OnGUI()
{
...
// Toggle - value must in class,not in function
checkbox = EditorGUILayout.Toggle("Toggle:", checkbox);
checkboxLeft = EditorGUILayout.ToggleLeft("ToggleLeft:", checkboxLeft);
}
EditorGUILayout.Vector2Field
EditorGUILayout.Vector3Field
EditorGUILayout.Vector4Field
界面内输入值的类型为float
Vector2 vector2_init = new Vector2();
Vector2 vector2_result = EditorGUILayout.Vector2Field("Vector2(float):", vector2_init);
Vector3 vector3_init = new Vector3();
Vector3 vector3_result = EditorGUILayout.Vector3Field("Vector3(float):", vector3_init);
Vector4 vector4_init = new Vector4();
Vector4 vector4_result = EditorGUILayout.Vector4Field("Vector4(float):", vector4_init);
2017.2新增API
EditorGUILayout.Vector2IntField
EditorGUILayout.Vector3IntField