예제 #1
0
        private void DrawElementCallback(Rect rect, int index, bool isActive, bool isFocused)
        {
            rect.width = EditorGUIUtility.currentViewWidth - GUI.skin.verticalScrollbar.fixedWidth - 32;
            float oldY = rect.y;

            rect.y += EditorGUIUtility.standardVerticalSpacing * 2;

            SerializedProperty element       = reorderableList.serializedProperty.GetArrayElementAtIndex(index);
            SerializedProperty elementTarget = element.FindPropertyRelative("Target");

            EditorGUI.BeginChangeCheck();
            EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width + 4, EditorGUIUtility.singleLineHeight), elementTarget, GUIContent.none);
            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                data.ValidateData(index);
            }

            UnityEngine.Object elementTypeObj = element.FindPropertyRelative("Type").objectReferenceValue;
            if (elementTypeObj != null)
            {
                // Create foldout
                SerializedProperty showFoldout = element.FindPropertyRelative("Foldout");
                rect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing * 4;
                showFoldout.boolValue = EditorGUI.Foldout(new Rect(rect.x, rect.y, EditorGUIUtility.currentViewWidth - GUI.skin.verticalScrollbar.fixedWidth, EditorGUIUtility.singleLineHeight), showFoldout.boolValue, "");
                if (showFoldout.boolValue)
                {
                    PlatformLabel platformLabel = new PlatformLabel();
                    platformLabel.OnGUI(rect, null, null);

                    SerializedObject   elementType         = new SerializedObject(elementTypeObj);
                    SerializedProperty elementTypeIterator = elementType.GetIterator();
                    elementTypeIterator.NextVisible(true);
                    while (elementTypeIterator.NextVisible(false))
                    {
                        elementTypeIterator.serializedObject.Update();
                        rect.y += EditorGUI.GetPropertyHeight(elementTypeIterator, false) * 1.5f;
                        EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), elementTypeIterator, true);
                        if (elementTypeIterator.isArray && elementTypeIterator.isExpanded && elementTypeIterator.arraySize != 0)
                        {
                            for (int i = 0; i < elementTypeIterator.arraySize; i++)
                            {
                                rect.y += EditorGUI.GetPropertyHeight(elementTypeIterator.GetArrayElementAtIndex(i), true) * 1.5f;
                            }
                        }
                        elementTypeIterator.serializedObject.ApplyModifiedProperties();
                    }
                }
            }

            rect.x      = 0;
            rect.y      = oldY + ElementHeightCallback(index) - EditorGUIUtility.standardVerticalSpacing;
            rect.width  = EditorGUIUtility.currentViewWidth;
            rect.height = 1;
            EditorGUI.DrawRect(rect, Color.grey);
        }