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

Youngmin Choi·2021년 8월 17일
0

Unity

목록 보기
4/16

이 Attribute를 지정해주면 Inspector에서 값을 볼 수는 있으나 수정은 불가능하다.


https://answers.unity.com/questions/489942/how-to-make-a-readonly-property-in-inspector.html
[위 글 참조!]

  • [ReadOnly]혹은 [ReadOnly(false)]로 사용하면 항상 수정할 수 없다.
  • [ReadOnly(true)]로 사용하면 게임이 실행중인 동안에는 수정할 수 없다.


    위 기술은 개인작업에서 뿐만 아니라 공동작업에서도 빛을 발한다. 공동 작업시에는 별도의 의사소통 없어도 의도를 명확히 할 수 있다는 장점이 있다. 특히 유니티 에디터는 개발자만 사용하는 것이 아니라 기획자 혹은 적게는 디자이너도 사용한다. (개발자에게 사용자는 내부에도 있다는 점은 항상 유의!) 자신이 짠 코드를 오랜시간 이후에도 지나서 사용한다면 은닉성이 보장된 프로퍼티를 보게 되었을 때 다시금 상기하는데 도움이 될 수 있을것이다!
using UnityEngine;
using System;
#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;
    }
}
profile
Always, Continually, In all circumstance

0개의 댓글