Unity3d 2017.3 自定义编辑器 枚举 隐藏与显示

今天第一次自定义编辑器,记录一下心得。

1.在Editor文件夹下建立一个脚本,将此脚本与想自定义编辑器的脚本绑定

2.在OnEnable()方法中获取原脚本中,需要操作的对象。

3.OnInspectorGUI()中,EditorGUILayout.PropertyField(Enemy);方法的先后顺序,决定了编辑器中排列的先后顺序。

4.如果需要下拉菜单,请定义枚举类型

5.最后,不要忘了test.ApplyModifiedProperties();将之前的代码应用。

using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(EnemyAI))]//关联修改的脚本
public class NewBehaviourScript1 : Editor
{
    //序列化
    private SerializedObject test;
    //各个公开变量
    public SerializedProperty Enemy;
    private SerializedProperty Player;
    private SerializedProperty ChooseEnemyPattern;
    private SerializedProperty ChooseEnemyType;
    private SerializedProperty PatrolA;
    private SerializedProperty PatrolB;
    private SerializedProperty LaserTX;
    private SerializedProperty ATInterval;
    private SerializedProperty EnemyAttackRange;
    private SerializedProperty EnemyMoveSpeed;
    private SerializedProperty EnemyRotateSpeed;


    void OnEnable()
    {
        //获取到相关对象
        test = new SerializedObject(target);
        //获取选择
        ChooseEnemyPattern = test.FindProperty("ChooseEnemyPattern");
        //获取各个公开变量
        Enemy = test.FindProperty("Enemy");
        Player = test.FindProperty("Player");
        ChooseEnemyType = test.FindProperty("ChooseEnemyType");
        PatrolA = test.FindProperty("PatrolA");
        PatrolB = test.FindProperty("PatrolB");
        LaserTX = test.FindProperty("LaserTX");
        ATInterval = test.FindProperty("ATInterval");
        EnemyAttackRange = test.FindProperty("EnemyAttackRange");
        EnemyMoveSpeed = test.FindProperty("EnemyMoveSpeed");
        EnemyRotateSpeed = test.FindProperty("EnemyRotateSpeed");
    }
    public override void OnInspectorGUI()
    {
        test.Update();//更新test
        //各个模式下均公开的变量
        EditorGUILayout.PropertyField(Enemy);
        EditorGUILayout.PropertyField(Player);
        EditorGUILayout.PropertyField(ChooseEnemyType);
        EditorGUILayout.PropertyField(ChooseEnemyPattern);
        if (ChooseEnemyPattern.enumValueIndex == 0)//AT模式下公开的变量
        {
            EditorGUILayout.PropertyField(PatrolA);
            EditorGUILayout.PropertyField(PatrolB);
            EditorGUILayout.PropertyField(LaserTX);
            EditorGUILayout.PropertyField(EnemyAttackRange);
            EditorGUILayout.PropertyField(EnemyMoveSpeed);
        }
        else if (ChooseEnemyPattern.enumValueIndex == 1)//MT模式下公开的变量
        {
            EditorGUILayout.PropertyField(LaserTX);
            EditorGUILayout.PropertyField(ATInterval);
            EditorGUILayout.PropertyField(EnemyAttackRange);
            EditorGUILayout.PropertyField(EnemyMoveSpeed);
            EditorGUILayout.PropertyField(EnemyRotateSpeed);
        }
        test.ApplyModifiedProperties();//应用
    }
}

选择AT之后 Unity3d 2017.3 自定义编辑器 枚举 隐藏与显示_第1张图片

选择MT之后Unity3d 2017.3 自定义编辑器 枚举 隐藏与显示_第2张图片

你可能感兴趣的:(客户端)