Beispiel #1
0
        private AnimatorGroup DrawGroupDropdown()
        {
            AnimatorGroup animatorGroup;

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Group", GUILayout.Width(100));
                string[] names = m_AnimatorGroups.Keys.ToArray();
                selectedAnimatorGroup = Math.Min(names.Length - 1, selectedAnimatorGroup);
                selectedAnimatorGroup = EditorGUILayout.Popup(selectedAnimatorGroup, names);
                animatorGroup         = m_AnimatorGroups[names[selectedAnimatorGroup]];
                if (m_AddGroupHidden && GUILayout.Button("+", InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(16), GUILayout.Height(16)))
                {
                    m_AddGroupHidden = false;
                }
                else if (!m_AddGroupHidden && GUILayout.Button("-", InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(16), GUILayout.Height(16)))
                {
                    m_AddGroupHidden = true;
                }
            }
            GUILayout.EndHorizontal();

            if (!m_AddGroupHidden)
            {
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Space(110);
                    GUILayout.BeginVertical();
                    {
                        GUILayout.BeginHorizontal();
                        {
                            GUILayout.Label("Group Name:", GUILayout.Width(75));
                            m_AddGroupName = GUILayout.TextField(m_AddGroupName);
                            if (GUILayout.Button("Add", GUILayout.Width(60)))
                            {
                                foreach (AnimatorControllerLayer layer in m_AnimatorController.layers)
                                {
                                    string key    = "add-group-toggle-" + layer.name;
                                    bool   toggle = CollectionUtil.GetOrAdd(m_Toggles, key, false);
                                    if (toggle)
                                    {
                                        AnimUtil.AddStateMachineToLayer(layer, m_AddGroupName);
                                    }
                                }
                                Index();
                                string[] keys = m_AnimatorGroups.Keys.ToArray();
                                selectedAnimatorGroup = Array.IndexOf(keys, m_AddGroupName);
                                animatorGroup         = m_AnimatorGroups[m_AddGroupName];
                                m_AddGroupHidden      = true;
                                m_AddGroupName        = "";
                                m_AddActionHidden     = true;
                            }
                        }
                        GUILayout.EndHorizontal();

                        foreach (AnimatorControllerLayer layer in m_AnimatorController.layers)
                        {
                            string key    = "add-group-toggle-" + layer.name;
                            bool   toggle = CollectionUtil.GetOrAdd(m_Toggles, key, false);
                            m_Toggles[key] = GUILayout.Toggle(toggle, layer.name);
                        }
                    }
                    GUILayout.EndVertical();
                }
                GUILayout.EndHorizontal();
            }

            return(animatorGroup);
        }
Beispiel #2
0
        private ActionSet DrawActionSetDropdown(AnimatorGroup animatorGroup)
        {
            ActionSet actionSet = null;

            GUILayout.BeginHorizontal();
            {
                GUILayout.Label("Action", GUILayout.Width(100));
                string[] names = animatorGroup.Actions.Keys.ToArray();
                selectedAction = Math.Max(0, selectedAction);
                if (names.Length == 0 || !animatorGroup.Actions.ContainsKey(names[selectedAction]))
                {
                    GUILayout.Label("No actions created.");
                }
                else
                {
                    selectedAction = EditorGUILayout.Popup(selectedAction, names);
                    actionSet      = animatorGroup.Actions[names[selectedAction]];
                }

                if (m_AddActionHidden && GUILayout.Button("+", InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(16), GUILayout.Height(16)))
                {
                    m_AddActionHidden = false;
                    foreach (AnimatorControllerLayer layer in animatorGroup.Layers.Values)
                    {
                        string key = "add-action-toggle-" + layer.name;
                        m_Toggles[key] = true;
                    }
                }
                else if (!m_AddActionHidden && GUILayout.Button("-", InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(16), GUILayout.Height(16)))
                {
                    m_AddActionHidden = true;
                }
            }
            GUILayout.EndHorizontal();

            if (!m_AddActionHidden)
            {
                GUILayout.BeginHorizontal();
                {
                    GUILayout.Space(110);
                    GUILayout.BeginVertical();
                    {
                        GUILayout.BeginHorizontal();
                        {
                            GUILayout.Label("Action Name:", GUILayout.Width(75));
                            m_AddActionName = GUILayout.TextField(m_AddActionName);
                            if (GUILayout.Button("Add", GUILayout.Width(60)))
                            {
                                foreach (AnimatorControllerLayer layer in m_AnimatorController.layers)
                                {
                                    string key    = "add-action-toggle-" + layer.name;
                                    bool   toggle = CollectionUtil.GetOrAdd(m_Toggles, key, false);
                                    if (toggle)
                                    {
                                        AnimatorStateMachine stateMachine =
                                            AnimUtil.AddStateMachineToLayer(layer, animatorGroup.Name);
                                        AnimatorState state = AnimUtil.AddStateToStateMachine(stateMachine, m_AddActionName);
                                        state.motion = m_Motion;
                                    }
                                }
                                Index();
                                string[] actions = animatorGroup.Actions.Keys.ToArray();
                                selectedAction    = Array.IndexOf(actions, m_AddActionName);
                                m_AddActionHidden = true;
                                m_AddGroupHidden  = true;
                                m_AddActionName   = "";
                            }
                        }
                        GUILayout.EndHorizontal();
                        m_Motion = (Motion)EditorGUILayout.ObjectField("Motion", m_Motion, typeof(Motion));

                        foreach (AnimatorControllerLayer layer in m_AnimatorController.layers)
                        {
                            string key    = "add-action-toggle-" + layer.name;
                            bool   toggle = CollectionUtil.GetOrAdd(m_Toggles, key, false);
                            m_Toggles[key] = GUILayout.Toggle(toggle, layer.name);
                        }
                    }
                    GUILayout.EndVertical();
                }
                GUILayout.EndHorizontal();
            }

            return(actionSet);
        }
Beispiel #3
0
        private void DrawAnimatorTransition(AnimatorTransitionBase transition, string source = null, CombinedAnimatorState sourceState = null, bool foldout = true)
        {
            // This is ugly. Apparently you can't modify the collection directly.
            // The only way I found that worked was to remove conditions and readd
            // on modification. There must be a better way to do it.
            // TODO: Do this the right way.
            List <AnimatorCondition> conditions = new List <AnimatorCondition>();
            bool modified = false;

            string label = GetTransitionLabel(transition, sourceState, source);

            GUILayout.BeginHorizontal();
            {
                if (foldout)
                {
                    foldouts[transition] = EditorGUILayout.Foldout(CollectionUtil.GetOrAdd(foldouts, transition, false), label);
                }
                else
                {
                    GUILayout.Label(label);
                }
                if (!foldout || foldouts[transition])
                {
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("+", InspectorStyles.NoPaddingButtonStyle, GUILayout.Width(16), GUILayout.Height(16)))
                    {
                        AnimatorCondition condition = new AnimatorCondition();
                        condition.parameter = parameterNames[0];
                        conditions.Add(condition);
                        modified = true;
                    }
                }
            }
            GUILayout.EndHorizontal();

            if (!foldout || foldouts[transition])
            {
                for (int i = 0; i < transition.conditions.Length; i++)
                {
                    var  condition = transition.conditions[i];
                    bool remove;
                    if (DrawAnimatorCondition(ref condition, out remove))
                    {
                        if (!remove)
                        {
                            conditions.Add(condition);
                        }
                        modified = true;
                    }
                    else
                    {
                        conditions.Add(transition.conditions[i]);
                    }
                }

                if (modified)
                {
                    while (transition.conditions.Length > 0)
                    {
                        transition.RemoveCondition(transition.conditions[0]);
                    }

                    foreach (AnimatorCondition condition in conditions)
                    {
                        transition.AddCondition(condition.mode, condition.threshold, condition.parameter);
                    }
                }
            }
        }