반응형
- 읽기전용으로 인스펙터에 보일 수 있게 만들어주는 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
출처