首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当属性是列表时,如何在PropertyDrawer上实现ReorderableList

当属性是列表时,在PropertyDrawer上实现ReorderableList可以通过Unity的EditorGUILayout扩展来实现。下面是一个示例代码:

代码语言:txt
复制
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;

[CustomEditor(typeof(YourScript))]
public class YourScriptEditor : Editor
{
    private ReorderableList list;

    private void OnEnable()
    {
        list = new ReorderableList(serializedObject, serializedObject.FindProperty("yourListProperty"), true, true, true, true);

        list.drawHeaderCallback = rect =>
        {
            EditorGUI.LabelField(rect, "Your List Property");
        };

        list.drawElementCallback = (rect, index, isActive, isFocused) =>
        {
            var element = list.serializedProperty.GetArrayElementAtIndex(index);
            rect.y += 2;

            EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
        };

        list.onAddCallback = list =>
        {
            var index = list.serializedProperty.arraySize;
            list.serializedProperty.arraySize++;
            list.index = index;

            var element = list.serializedProperty.GetArrayElementAtIndex(index);
            element.objectReferenceValue = null;
        };
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        list.DoLayoutList();

        serializedObject.ApplyModifiedProperties();
    }
}

上述代码中,我们首先创建了一个ReorderableList对象,并设置了它的一些回调函数。在drawHeaderCallback回调中,我们绘制了列表的标题。在drawElementCallback回调中,我们绘制了列表中每个元素的GUI。在onAddCallback回调中,我们实现了添加新元素的逻辑。

然后,在自定义的Editor类中,我们重写了OnInspectorGUI方法,在该方法中调用了list.DoLayoutList()来绘制整个列表。

请注意,上述代码中的"YourScript"和"yourListProperty"需要替换为你自己的脚本和属性名称。

这样,当你在Inspector面板中选择一个拥有该列表属性的脚本时,你将能够在PropertyDrawer上实现可排序的列表。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券