UnityEditor - 窗口与窗口内控件

编者注

由于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

附录

Unity 2017.2文档
Unity 5.6.x文档

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值