📗

【Unity】ReadOnly属性: Inspectorで編集不可のパラメータを表示したい

に公開

はじめに

初めての方も、そうでない方もこんにちは!
現役ゲームプログラマーのたむぼーです。
自己紹介を載せているので、気になる方は見ていただければ嬉しいです!

今回は
 UnityのInspectorで編集不可のパラメータを表示する方法
を紹介します

https://zenn.dev/tmb/articles/1072f8ea010299

処理全体

ReadOnlyAttribute.csとReadOnlyDrawer.csの2つ作成します。
ReadOnlyAttributeは任意のフォルダに格納します。
ReadOnlyDrawerはEditorフォルダに格納してください。

ReadOnlyAttribute.cs
using UnityEngine;

public class ReadOnlyAttribute : PropertyAttribute
{
}
ReadOnlyDrawer.cs
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer
{
    /// <summary>
    /// OnGUI
    /// </summary>
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        EditorGUI.BeginDisabledGroup(true);
        EditorGUI.PropertyField(position, property, label, true);
        EditorGUI.EndDisabledGroup();
    }

    /// <summary>
    /// プロパティの高さを調整する
    /// </summary>
    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        return EditorGUI.GetPropertyHeight(property, label, true);
    }
}
#endif

使い方

Inspectorで編集不可にしたい変数にReadOnly属性を追加

ReadOnlyTest.cs
using UnityEngine;

public class ReadOnlyTest : MonoBehaviour
{
	[ReadOnly]
	public Vector3 parameter1;

	[SerializeField, ReadOnly]
	private Vector3 _parameter2;
}

Discussion