Unity Editor 控制检视面板的属性是否显示和绘制只读属性


TestInspectorPropertyVisible.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestInspectorPropertyVisible : MonoBehaviour {

    [System.Serializable]
    public class AdvancedSetting {
        public bool smoothing;
        public int id;
    }

    [SerializeField] private bool m_visibleAdvancedSetting;
    [SerializeField] private AdvancedSetting m_advancedSetting;
    [SerializeField] private string m_content;

}

EditorTestInspectorPropertyVisible.cs

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(TestInspectorPropertyVisible))]
public class EditorTestInspectorPropertyVisible : Editor {

    private SerializedProperty m_scriptProp;
    //
    private SerializedProperty m_visibleAdvancedSettingProp;
    private SerializedProperty m_advancedSettingProp;
    private SerializedProperty m_contentProp;

    private void OnEnable () {
        m_scriptProp = serializedObject.FindProperty("m_Script");
        //
        m_visibleAdvancedSettingProp = serializedObject.FindProperty("m_visibleAdvancedSetting");
        m_advancedSettingProp = serializedObject.FindProperty("m_advancedSetting");
        m_contentProp = serializedObject.FindProperty("m_content");
    }

    public override void OnInspectorGUI () {
        serializedObject.Update();
        // 设置 GUI.enabled,绘制 ‘Script’ 为只读属性
        GUI.enabled = false;
        EditorGUILayout.PropertyField(m_scriptProp);
        GUI.enabled = true;
        {
            EditorGUILayout.PropertyField(m_visibleAdvancedSettingProp);
            if (m_visibleAdvancedSettingProp.boolValue) {
                EditorGUILayout.PropertyField(m_advancedSettingProp);
            }
            EditorGUILayout.PropertyField(m_contentProp);
        }
        serializedObject.ApplyModifiedProperties();
    }
}