UnityEditor - 窗口与窗口内控件

为什么80%的码农都做不了架构师?>>>   hot3.png

编者注

由于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));
    }

运行显示

UnityEditor - 窗口与窗口内控件_第1张图片

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);
        ...
}

UnityEditor - 窗口与窗口内控件_第2张图片

EditorGUILayout.PasswordField

        password = EditorGUILayout.PasswordField("123456");

输入图片说明

EditorGUILayout.Popup

        string[] options = new string[] { "中文测试","Cube", "Sphere", "Plane" };
        index = EditorGUILayout.Popup(index, options);

UnityEditor - 窗口与窗口内控件_第3张图片

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);
        ...
}

UnityEditor - 窗口与窗口内控件_第4张图片

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);

UnityEditor - 窗口与窗口内控件_第5张图片

2017.2新增API

EditorGUILayout.Vector2IntField
EditorGUILayout.Vector3IntField

附录

Unity 2017.2文档
Unity 5.6.x文档

转载于:https://my.oschina.net/hava/blog/1551487

你可能感兴趣的:(UnityEditor - 窗口与窗口内控件)