[unity]インスペクタに読み取り専用フィールドを作成する

以下のコードを Assets/ 以下に配置します。

Editor/ 以下には配置しないでください。(エラーになります)

DisabledAttribute.cs

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

// usage: [Disabled]
public class DisabledAttribute : PropertyAttribute {}

#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(DisabledAttribute))]
public class DisabledAttributeDrawer : PropertyDrawer
{
    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        return EditorGUI.GetPropertyHeight(property, label, true);
    }

    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        GUI.enabled = false;
        EditorGUI.PropertyField(position, property, label, true);
        GUI.enabled = true;
    }
}
#endif

使い方

using UnityEngine;

public class Test : MonoBehaviour
{
    [SerializeField]
    string enabledString = "Bon Jovi";

    [SerializeField, Disabled]
    string disabledString = "Slippery When Wet";
}

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA