Пример #1
0
    public override void OnInspectorGUI()
    {
        TargetObject.Update();
        EditorStyles.foldout.fontStyle = FontStyle.Bold;

        GUILayout.BeginVertical();
        {
            EditorGUILayout.Space();

            for (int i = 0; i < Collisions.arraySize; i++)
            {
                EditorGUI.indentLevel = 0;

                SerializedProperty actionRef = Collisions.GetArrayElementAtIndex(i);

                SerializedProperty collisionType             = actionRef.FindPropertyRelative("collisionType");
                SerializedProperty eventType                 = actionRef.FindPropertyRelative("eventType");
                SerializedProperty searchFor                 = actionRef.FindPropertyRelative("searchFor");
                SerializedProperty layer                     = actionRef.FindPropertyRelative("layer");
                SerializedProperty component                 = actionRef.FindPropertyRelative("component");
                SerializedProperty tag                       = actionRef.FindPropertyRelative("tag");
                SerializedProperty onTagCollisionEnter       = actionRef.FindPropertyRelative("onTagCollisionEnter");
                SerializedProperty onTagCollisionStay        = actionRef.FindPropertyRelative("onTagCollisionStay");
                SerializedProperty onTagCollisionExit        = actionRef.FindPropertyRelative("onTagCollisionExit");
                SerializedProperty onComponentCollisionEnter = actionRef.FindPropertyRelative("onComponentCollisionEnter");
                SerializedProperty onComponentCollisionStay  = actionRef.FindPropertyRelative("onComponentCollisionStay");
                SerializedProperty onComponentCollisionExit  = actionRef.FindPropertyRelative("onComponentCollisionExit");
                SerializedProperty onLayerCollisionEnter     = actionRef.FindPropertyRelative("onLayerCollisionEnter");
                SerializedProperty onLayerCollisionStay      = actionRef.FindPropertyRelative("onLayerCollisionStay");
                SerializedProperty onLayerCollisionExit      = actionRef.FindPropertyRelative("onLayerCollisionExit");

                GUILayout.BeginVertical();
                {
                    GUILayout.BeginHorizontal();
                    {
                        collisionShowers[i] = EditorGUILayout.Foldout(collisionShowers[i], "Collision " + i, true, EditorStyles.foldout);
                        EditorGUILayout.Space();
                        GUI.backgroundColor = Color.red;
                        if (GUILayout.Button("X", GUILayout.Width(20)))
                        {
                            collisionBehaviour.RemoveCollision(i);
                            collisionShowers.RemoveAt(i);
                        }
                        GUI.backgroundColor = defaultColor;
                    }
                    GUILayout.EndHorizontal();

                    EditorGUI.indentLevel++;

                    if (collisionShowers[i])
                    {
                        GUILayout.BeginVertical();
                        {
                            EditorGUILayout.Space();

                            EditorGUILayout.PropertyField(collisionType);
                            EditorGUILayout.Space();
                            EditorGUILayout.PropertyField(eventType);
                            EditorGUILayout.Space();
                            EditorGUILayout.PropertyField(searchFor);
                            EditorGUILayout.Space();

                            switch (searchFor.enumValueIndex)
                            {
                            case 0:
                                EditorGUILayout.PropertyField(component);
                                EditorGUILayout.Space();
                                switch (eventType.enumValueIndex)
                                {
                                case 0:
                                    EditorGUILayout.PropertyField(onComponentCollisionEnter);
                                    break;

                                case 1:
                                    EditorGUILayout.PropertyField(onComponentCollisionStay);
                                    break;

                                case 2:
                                    EditorGUILayout.PropertyField(onComponentCollisionExit);
                                    break;
                                }
                                break;

                            case 1:
                                EditorGUILayout.PropertyField(layer);
                                EditorGUILayout.Space();
                                switch (eventType.enumValueIndex)
                                {
                                case 0:
                                    EditorGUILayout.PropertyField(onLayerCollisionEnter);
                                    break;

                                case 1:
                                    EditorGUILayout.PropertyField(onLayerCollisionStay);
                                    break;

                                case 2:
                                    EditorGUILayout.PropertyField(onLayerCollisionExit);
                                    break;
                                }
                                break;

                            case 2:
                                EditorGUILayout.PropertyField(tag);
                                EditorGUILayout.Space();
                                switch (eventType.enumValueIndex)
                                {
                                case 0:
                                    EditorGUILayout.PropertyField(onTagCollisionEnter);
                                    break;

                                case 1:
                                    EditorGUILayout.PropertyField(onTagCollisionStay);
                                    break;

                                case 2:
                                    EditorGUILayout.PropertyField(onTagCollisionExit);
                                    break;
                                }
                                break;
                            }
                        }
                        GUILayout.EndVertical();

                        EditorGUILayout.Space();
                    }

                    EditorGUILayout.Space();
                }
                GUILayout.EndVertical();
            }

            if (GUILayout.Button("Add New Collision"))
            {
                collisionBehaviour.AddCollision();
                collisionShowers.Add(false);
            }
        }
        GUILayout.EndVertical();

        TargetObject.ApplyModifiedProperties();
    }