zl程序教程

您现在的位置是:首页 >  工具

当前栏目

十二、编辑器开发之Slider及各类字段绘制

编辑器开发 绘制 十二 各类 slider
2023-06-13 09:11:38 时间

为测试脚本Test类中添加以下字段:

using UnityEngine;

public class Test : MonoBehaviour
{
    public enum TestEnum
    {
        Enum1,
        Enum2,
    }
    public string stringValue = "str";
    public int intValue = 30;
    public float floatValue = 50f;
    public AudioClip clipValue;
    public string passwordValue = "1a2s3xd455";
    public TestEnum EnumValue = TestEnum.Enum1;
}

创建Test类的编辑器类TestEditor

1.滑动条

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Test))]
public class TestEditor : Editor
{
    private Test Target;
    private void OnEnable()
    {
        Target = target as Test;
    }

    public override void OnInspectorGUI()
    {
        //绘制Int类型滑动条
        int newIntValue = EditorGUILayout.IntSlider("Int Value", Target.intValue, 0, 30);
        if (newIntValue != Target.intValue)
        {
            Target.intValue = newIntValue;
        }
        //绘制Float类型滑动条
        float newFloatValue = EditorGUILayout.Slider("Float Value", Target.floatValue, 0f, 100f);
        if (newFloatValue != Target.floatValue)
        {
            Target.floatValue = newFloatValue;
        }
    }
}

2.各类字段:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Test))]
public class TestEditor : Editor
{
    private Test Target;
    private void OnEnable()
    {
        Target = target as Test;
    }

    public override void OnInspectorGUI()
    {
        //绘制String类型字段
        string newStringValue = EditorGUILayout.TextField("String Value", Target.stringValue);
        if (newStringValue != Target.stringValue)
        {
            Target.stringValue = newStringValue;
        }
        //绘制Int类型字段
        int newIntValue = EditorGUILayout.IntField("Int Value", Target.intValue);
        if (newIntValue != Target.intValue)
        {
            Target.intValue = newIntValue;
        }
        //绘制Float类型字段
        float newFloatValue = EditorGUILayout.FloatField("Float Value", Target.floatValue);
        if (newFloatValue != Target.floatValue)
        {
            Target.floatValue = newFloatValue;
        }
        //绘制Object类型字段 通过as转化为其它类型
        AudioClip newClipValue = EditorGUILayout.ObjectField("AudioClip Value", Target.clipValue, typeof(AudioClip), false) as AudioClip;
        if (newClipValue != Target.clipValue)
        {
            Target.clipValue = newClipValue;
        }
        //绘制密文类型的String字段
        string newPasswordValue = EditorGUILayout.PasswordField("Password Value", Target.passwordValue);
        if(newPasswordValue != Target.passwordValue)
        {
            Target.passwordValue = newPasswordValue;
        }
        //绘制枚举类型字段
        Test.TestEnum newEnumValue = (Test.TestEnum)EditorGUILayout.EnumPopup("Enum Value", Target.EnumValue);
        if (newEnumValue != Target.EnumValue)
        {
            Target.EnumValue = newEnumValue;
        }
    }
}