【Unity】編集不可のパラメータをInspectorに表示する

DEVELOP, Unity

デバッグ用のパラメータ表示など、編集はしたくないけどパラメータの表示だけはしたいってことが多々あります。それを実現するための手順になります。

目次

確認バージョン

2019.3.0f6

ソースコード

using UnityEngine;
 
public class ReadOnlyAttribute : PropertyAttribute
{
}
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
 
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : PropertyDrawer
{
    public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _label)
    {
        EditorGUI.BeginDisabledGroup(true);
        EditorGUI.PropertyField(_position, _property, _label);
        EditorGUI.EndDisabledGroup();
    }
}
#endif

使い方

編集不可にしたいプロパティに対して ReadOnly 属性を付与します。

using System;
using System.Collections.Generic;
using UnityEngine;
 
public class Sample : MonoBehaviour
{
    [Serializable]
    public class SerializableClass
    {
        public string Name;
        public int Value;
 
        public SerializableClass(string _name, int _value)
        {
            Name = _name;
            Value = _value;
        }
    }
 
    [SerializeField, ReadOnly]
    private Vector3 vector3;
 
    [SerializeField, ReadOnly]
    private List<SerializableClass> serializableClassListReadOnly = new List<SerializableClass>()
     {
         new SerializableClass("Test1", 1),
         new SerializableClass("Test2", 2),
     };
 
    [SerializeField, ReadOnly]
    private List<int> intListReadOnly = new List<int>() { 1, 2, 3, 4 };
}

結果

各要素がグレーアウトして編集不可状態になっています。Listの要素数であるSizeだけ編集出来てしまうので、こちらも解決したいところです。今後の課題です。

Posted by kazupon