private void CreateList()
    {
        reorderableList = new ReorderableList(serializedObject, serializedObject.FindProperty("references"), true, true, true, true);

        reorderableList.drawHeaderCallback = (Rect rect) =>
        {
            EditorGUI.LabelField(rect, "Object References");
        };

        reorderableList.elementHeight = (EditorGUIUtility.singleLineHeight * ROWS_PER_ELEMENT) + PADDING_TOP + PADDING_BOTTOM + (ROWS_PER_ELEMENT - 1) * ELEMENT_SPACING;

        reorderableList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
        {
            GenericObjectPoolObject.ObjectReference reference = Instance.GetReference(index);

            float y = rect.y;

            y += PADDING_TOP;

            reference.Key = EditorGUI.TextField(
                new Rect(rect.x, y, rect.width, EditorGUIUtility.singleLineHeight),
                "Key",
                reference.Key);

            y += ELEMENT_SPACING + EditorGUIUtility.singleLineHeight;


            Object oldObj = reference.Object;
            reference.Object = EditorGUI.ObjectField(
                new Rect(rect.x, y, rect.width / 2 - LIST_SPACING, EditorGUIUtility.singleLineHeight),
                "Object",
                reference.Object,
                typeof(Object),
                false);

            if (oldObj != reference.Object && reference.Key == "")
            {
                reference.Key = reference.Object.name;
            }

            reference.Instances = EditorGUI.IntSlider(
                new Rect(rect.x + rect.width / 2, y, rect.width / 2, EditorGUIUtility.singleLineHeight),
                "Instances",
                reference.Instances,
                0,
                100);

            Instance.SetReference(index, reference);
        };
    }
コード例 #2
0
    protected virtual void CreateObjects(GenericObjectPoolObject.ObjectReference reference)
    {
        if (pool.ContainsKey(reference.Key))
        {
            Debug.LogError("Duplicate object pool keys", gameObject);
            return;
        }

        pool.Add(reference.Key, new Queue <Object>());
        originalObjects.Add(reference.Key, reference.Object);

        for (int i = 0; i < reference.Instances; i++)
        {
            pool[reference.Key].Enqueue(CreateObject(reference.Object));
        }
    }