如何使 ReorderableList 元素在检查器中正确展开和调整大小?

问题描述 投票:0回答:1

我有一个使用

CustomPropertyDrawer
在编辑器中显示的对象列表 目前我使用
ReorderableList
存储该列表,我已经覆盖了
drawElementCallback
onAddDropdownCallback
,相关代码如下所示:

        reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
        {
            GUIContent elementLabel = new GUIContent();
            elementLabel.text = "element " + index;
            Rect elementRect = new Rect(rect.x, rect.y, rect.width, EditorGUI.GetPropertyHeight(list.GetArrayElementAtIndex(index)));
                
            EditorGUI.indentLevel++;
            EditorGUI.PropertyField(elementRect, list.GetArrayElementAtIndex(index), elementLabel, true);
            EditorGUI.indentLevel--;
        };

我的问题如下:列表的元素没有以正确的方式扩展,扩展时,它们占据了不应该的空间,就像这些例子一样。 第一个元素展开 最后一个元素展开 列表下方的深灰色空间确实会扩展,因此属性知道它应该占用更多空间......但不知何故,列表元素没有利用该空间。

我希望下一个元素向下移动,以便为展开的元素腾出空间,并使列表的浅灰色字段增长以适应。

潜在的重要注意事项:我的列表中的项目都有一个共同的类,它们继承自,但它们不一定是相同的类型,因此它们不会都具有相同的高度(就像我的两个图像中一样,元素是不同类型的)。

我认为我的错误是在提供的函数中的某个地方...我认为如果元素展开,在元素上调用

GetPropertyHeight()
会返回更大的高度,但看起来情况并非如此,我什至应该使用
ReorderableList 
这里?

编辑:我尝试使用

EditorGUILayout.PropertyField()
而不是
EditorGUI.PropertyField()
来自动获取列表项高度,我得到了这个结果,它的行为更接近我的期望,尽管列表本身现在从浅灰色区域向下移动。 .. 使用 EditorGUILayout 时的检查器

unity-game-engine
1个回答
0
投票

您必须正确实施

reorderableList.elementHeightCallback

不,在

ReorderableList
回调实现中,您必须使用具有固定
EditorGUI
绘图的
Rect
类型,并且不能使用自动布局的
EditorGUILayout
类型。

这基本上与 PropertyDrawer

的行为方式相同
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.