【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】

GUI系列操作

    • 1.枚举菜单实现
      • 文件1:Assets/MyScript/Test1.cs
        • 代码如下:
      • 文件2:Assets/MyScript/Editor/Test1Editor.cs
        • 代码如下:
      • 测试一下
        • 新建一个场景,新建一个Empty 节点,用来测试枚举组件
        • 将文件1:Assets/MyScript/Test1.cs拖到Game Object的Inspector面板上。
        • 实现了一个简单的枚举菜单:
    • 2.Window窗口菜单实现
      • 窗口菜单实现1——显示窗口:
        • 文件:Assets/MyScript/Test2Window.cs
          • 代码如下:
        • 测试一下
          • 保存文件后,在窗口左边有"测试2/ShowWindow"菜单选项
            • 打开"测试2/ShowWindow"窗口,如下:
      • 窗口菜单实现2——弹出类型:
        • 文件:Assets/MyScript/Test3Window.cs
          • 代码如下:
        • 测试一下
          • 打开"测试2/Test3Window"窗口,如下:
      • 窗口菜单实现3——浮动工具窗口:
        • 文件:Assets/MyScript/Test4Window.cs
          • 代码如下:
          • 测试一下
            • 打开"测试2/Test4Window"窗口,如下:
    • 3.Window窗口文本与颜色
      • 文件:Assets/MyScript/Test6Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test6Window"窗口,如下:
          • 窗口文本与颜色关键字:TextField、TextArea、PasswordField和ColorField。
    • 4.Window窗口标签字段
      • 文件:Assets/MyScript/Test7Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test7Window"窗口,如下:
          • 窗口标签字段关键字:LabelField("文本输入框");和Space(20);
    • 5.Window窗口滑动条
      • 文件:Assets/MyScript/Test8Window.cs
        • 代码如下:
        • 测试一下
          • 打开"测试2/Test7Window"窗口,如下:
          • 窗口标签字段关键字:Slider、IntSlider和EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);


1.枚举菜单实现

文件1:Assets/MyScript/Test1.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test1 : MonoBehaviour
{
    public Enum4 mEnum;
    public int mInt;
    public float mFloat;
    public string mStr;
    public Color mColor;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

public enum Enum4
{
    None,
    IntVal,
    FloatVal,
    StrVal,
    ColorVal
}

文件2:Assets/MyScript/Editor/Test1Editor.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Test1),true)]
public class Test4Editor : Editor
{
    public SerializedObject mObj;
    public SerializedProperty mEnum;
    public SerializedProperty mInt;
    public SerializedProperty mFloat;
    public SerializedProperty mStr;
    public SerializedProperty mColor;
    public void OnEnable()
    {
        this.mObj = new SerializedObject(target);
        this.mEnum = this.mObj.FindProperty("mEnum");
        this.mInt = this.mObj.FindProperty("mInt");
        this.mFloat = this.mObj.FindProperty("mFloat");
        this.mStr = this.mObj.FindProperty("mStr");
        this.mColor = this.mObj.FindProperty("mColor");
    }
    public override void OnInspectorGUI()
    {
        this.mObj.Update();
        EditorGUILayout.PropertyField(this.mEnum);
        switch (this.mEnum.enumValueIndex)
        {
            case 1:
                EditorGUILayout.PropertyField(this.mInt);
                break;
            case 2:
                EditorGUILayout.PropertyField(this.mFloat);
                break;
            case 3:
                EditorGUILayout.PropertyField(this.mStr);
                break;
            case 4:
                EditorGUILayout.PropertyField(this.mColor);
                break;
        }
        this.mObj.ApplyModifiedProperties();
    }
}

测试一下

新建一个场景,新建一个Empty 节点,用来测试枚举组件

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第1张图片

将文件1:Assets/MyScript/Test1.cs拖到Game Object的Inspector面板上。

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第2张图片

实现了一个简单的枚举菜单:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第3张图片


2.Window窗口菜单实现

窗口菜单实现1——显示窗口:

文件:Assets/MyScript/Test2Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test2Window : EditorWindow
{
    [MenuItem("测试2/ShowWindow")]
    public static void ShowWindow()
    {
        Test2Window.CreateInstance<Test2Window>().Show();
    }
}

测试一下
保存文件后,在窗口左边有"测试2/ShowWindow"菜单选项

如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第4张图片

打开"测试2/ShowWindow"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第5张图片

窗口菜单实现2——弹出类型:

文件:Assets/MyScript/Test3Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test3Window : EditorWindow
{
    [MenuItem("测试2/Test3Window")]
    public static void ShowWindow()
    {
        Test3Window.CreateInstance<Test3Window>().ShowUtility();
    }
}

测试一下
打开"测试2/Test3Window"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第6张图片

窗口菜单实现3——浮动工具窗口:

文件:Assets/MyScript/Test4Window.cs
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test4Window : EditorWindow
{
    [MenuItem("测试2/Test4Window")]
    public static void ShowWindow()
    {
        Test4Window.CreateInstance<Test4Window>().ShowPopup();
    }

    public void OnGUI()
    {
        if(GUILayout.Button("关闭"))
        {
            this.Close();
        }
    }
}

测试一下
打开"测试2/Test4Window"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第7张图片


3.Window窗口文本与颜色

文件:Assets/MyScript/Test6Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test6Window : EditorWindow
{
    [MenuItem("测试2/Test6Window")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow<Test6Window>().Show();
    }
    public string mText = "默认文本";
    public Color mColor = Color.white;
    public void OnGUI()
    {
        if (GUILayout.Button("关闭"))
        {
            this.Close();
        }
        this.mText = EditorGUILayout.TextField(this.mText);
        this.mText = EditorGUILayout.TextArea(this.mText);
        this.mText = EditorGUILayout.PasswordField(this.mText);

        this.mColor = EditorGUILayout.ColorField(this.mColor);
//EditorGUILayout 后面的关键字:TextField、TextArea、PasswordField和ColorField。

    }
}

测试一下
打开"测试2/Test6Window"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第8张图片

窗口文本与颜色关键字:TextField、TextArea、PasswordField和ColorField。

4.Window窗口标签字段

文件:Assets/MyScript/Test7Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test7Window : EditorWindow
{
    [MenuItem("测试2/Test7Window")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow<Test7Window>().Show();
    }
    public string mText = "默认文本";
    public Color mColor = Color.white;
    public void OnGUI()
    {
        EditorGUILayout.LabelField("文本输入框");
        this.mText = EditorGUILayout.TextField(this.mText);
        EditorGUILayout.Space(20);
        this.mText = EditorGUILayout.TextArea(this.mText);
        EditorGUILayout.SelectableLabel("密码输入框");
        this.mText = EditorGUILayout.PasswordField(this.mText);

        this.mColor = EditorGUILayout.ColorField(this.mColor);
    }
}

测试一下
打开"测试2/Test7Window"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第9张图片

窗口标签字段关键字:LabelField(“文本输入框”);和Space(20);

5.Window窗口滑动条

文件:Assets/MyScript/Test8Window.cs

代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class Test8Window : EditorWindow
{
    [MenuItem("测试2/Test8Window")]
    public static void ShowWindow()
    {
        EditorWindow.GetWindow<Test8Window>().Show();
    }
    public int mInt;
    public float mFloat;

    public float mMinFloat;
    public float mMaxFloat;
    public void OnGUI()
    {
        EditorGUILayout.LabelField("浮点值滑动条0-100");
        this.mFloat = EditorGUILayout.Slider(this.mFloat, 0, 100);
        EditorGUILayout.Space(20);
        EditorGUILayout.LabelField("整数值滑动条0-100");
        this.mInt = EditorGUILayout.IntSlider(this.mInt, 0, 100);

        EditorGUILayout.Space(30);
        EditorGUILayout.LabelField("最小值和最大值滑动条");
        this.mMinFloat = EditorGUILayout.Slider(this.mMinFloat, 0, 100);
        this.mMaxFloat = EditorGUILayout.Slider(this.mMaxFloat, 0, 100);
        EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);
    }
}

测试一下
打开"测试2/Test7Window"窗口,如下:

【Unity C#_插件开发系列_Inspector Component GUI系列菜单实现】_第10张图片

窗口标签字段关键字:Slider、IntSlider和EditorGUILayout.MinMaxSlider(ref this.mMinFloat, ref this.mMaxFloat, 0, 100);

你可能感兴趣的:(unity,c#,游戏引擎,经验分享,开发语言)