본문 바로가기
Study/Unity

[Unity] ReadOnly 인스펙터

by 스테디코디스트 2024. 3. 4.
반응형

- 읽기전용으로 인스펙터에 보일 수 있게 만들어주는 Attribute 생성 코드

- 변수 앞에 [ReadOnly]를 붙여 사용가능(단, public 이거나 Serialized Field 를 이용해 인스펙터 상에서 보여야 함.)

- [ReadOnly(false)] 또는 [ReadOnly]는 모든 경우에 읽기전용

- [ReadOnly(true)] 는 런타임 중에만 읽기전용으로 변경

 

#region ReadOnly 인스펙터 생성이 가능하도록 함.
#if UNITY_EDITOR
namespace UnityEditor
{
    [CustomPropertyDrawer(typeof(ReadOnlyAttribute), true)]
    public class ReadOnlyAttributeDrawer : PropertyDrawer
    {
        // Necessary since some properties tend to collapse smaller than their content
        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
        {
            return EditorGUI.GetPropertyHeight(property, label, true);
        }
        // Draw a disabled property field
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            GUI.enabled = !Application.isPlaying && ((ReadOnlyAttribute)attribute).runtimeOnly;
            EditorGUI.PropertyField(position, property, label, true);
            GUI.enabled = true;
        }
    }
}
#endif

[AttributeUsage(AttributeTargets.Field)]
public class ReadOnlyAttribute : PropertyAttribute
{
    public readonly bool runtimeOnly;
    public ReadOnlyAttribute(bool runtimeOnly = false)
    {
        this.runtimeOnly = runtimeOnly;
    }
}
#endregion

 

 

출처
 

Unity 읽기전용 인스펙터 프로퍼티

이 Attribute를 지정해주면 Inspector에서 값을 볼 수는 있으나 수정은 불가능하다.https://answers.unity.com/questions/489942/how-to-make-a-readonly-property-in-inspector.html

velog.io