gpt4 book ai didi

c# - unity EditorGUI.PropertyField 无法完全禁用数组或列表

转载 作者:行者123 更新时间:2023-12-05 08:08:58 25 4
gpt4 key购买 nike

所以,这是代码:

// 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 中仍然启用。我该如何解决?

谢谢。

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

最佳答案

问题是您的 Property Drawer 用于呈现列表中的每个元素(属性),而不是整个列表本身。

因此。每个属性都变为只读,但列表对象本身仍然呈现相同,Unity 呈现它的方式是显示“大小”属性。

关于c# - unity EditorGUI.PropertyField 无法完全禁用数组或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44286909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com