이 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; } }