Unity EditorGUI.PropertyField 无法完全禁用数组或列表

Unity EditorGUI.PropertyField can't fully disable array or List

所以,这是代码:

// ReadOnlyAttribyte,cs
public class ReadOnlyAttribute : PropertyAttribute
{

}

// ReadOnlyDrawer.cs
[CustomPropertyDrawer(typeof(ReadOnlyAttribute))]
public class ReadOnlyDrawer : 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;
 }
}

// test
[System.Serializable]
public class GridObjectData : ScriptableObject 
{
    [ReadOnly]
    public int ID;

[ReadOnly]
public List<GridCell> Grid;
}

这是一个简单的自定义属性和属性抽屉,它允许我们禁用所有标记的(由 [ReadOnly])字段在 GUI 中禁用。因此列表的元素被禁用,但是列表的大小在 GUI 中仍然启用。我该如何解决?

谢谢。

更新: 请看看它在检查器中的样子

试试这个:

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

问题是您的 属性 抽屉用于呈现列表中的 每个元素 (属性),而不是列表本身作为整个.

正是如此。每个 属性 确实变为只读,但列表对象本身仍然呈现相同,Unity 呈现它的方式是显示 "Size" 属性.