Exemple #1
0
        public static void AddParametersOnAnimator(UnityEditor.Animations.AnimatorController AnimController, UnityEditor.Animations.AnimatorController Mounted)
        {
            AnimatorControllerParameter[] parameters        = AnimController.parameters;
            AnimatorControllerParameter[] Mountedparameters = Mounted.parameters;

            foreach (var param in Mountedparameters)
            {
                if (!SearchParameter(parameters, param.name))
                {
                    AnimController.AddParameter(param);
                }
            }
        }
        /// <summary>
        /// Check whether the a given AnimatorController parameter associated
        /// </summary>
        /// <returns><c>true</c>, if animator controller parameter was validated, <c>false</c> otherwise.</returns>
        /// <param name="createIfMissing">If set to <c>true</c> and the param is missing from the AnimatorController, creates it.</param>
        public static bool ValidateAnimatorControllerParam(UnityEditor.Animations.AnimatorController controller,
                                                           string paramName, Type paramType, bool createIfMissing = true)
        {
            if (controller == null)
            {
                return(false);
            }

            if (IsParamDefinedInController(paramName, controller))
            {
                return(true);
            }

            if (!createIfMissing)
            {
                return(false);
            }

            var addParam = new AnimatorControllerParameter();

            if (typeof(bool).IsAssignableFrom(paramType))
            {
                addParam.type = AnimatorControllerParameterType.Bool;
            }
            else if (typeof(int).IsAssignableFrom(paramType))
            {
                addParam.type = AnimatorControllerParameterType.Int;
            }
            else if (typeof(float).IsAssignableFrom(paramType))
            {
                addParam.type = AnimatorControllerParameterType.Float;
            }
            else if (typeof(Invocable).IsAssignableFrom(paramType))
            {
                addParam.type = AnimatorControllerParameterType.Trigger;
            }
            else
            {
                return(false);
            }

            addParam.name = paramName;
            controller.AddParameter(addParam);

            return(true);
        }
        private static AnimationClip GenerateTriggerableTransition(string name, UnityEditor.Animations.AnimatorController controller)
        {
            // Create the clip
            var clip = UnityEditor.Animations.AnimatorController.AllocateAnimatorClip(name);

            AssetDatabase.AddObjectToAsset(clip, controller);

            // Create a state in the animatior controller for this clip
            var state = controller.AddMotion(clip);

            // Add a transition property
            controller.AddParameter(name, AnimatorControllerParameterType.Trigger);

            // Add an any state transition
            var stateMachine = controller.layers[0].stateMachine;
            var transition   = stateMachine.AddAnyStateTransition(state);

            transition.AddCondition(UnityEditor.Animations.AnimatorConditionMode.If, 0, name);
            return(clip);
        }
Exemple #4
0
        public static UnityEditor.Animations.AnimatorController BuildAnimationController(List <AnimationClip> clips, string path)
        {
            CheckPath(path, true);
            UnityEditor.Animations.AnimatorController      animatorController = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(path);
            UnityEditor.Animations.AnimatorControllerLayer layer = animatorController.layers[0];
            UnityEditor.Animations.AnimatorStateMachine    sm    = layer.stateMachine;

            animatorController.AddParameter("stage", AnimatorControllerParameterType.Int);
            animatorController.AddParameter("angle", AnimatorControllerParameterType.Int);

            string[] stateNames             = new string[] { "idle", "run", "attack", "skill1", "hurt", "die" };
            Dictionary <string, int> states = new Dictionary <string, int>();

            for (int i = 0; i < stateNames.Length; i++)
            {
                states.Add(stateNames[i], i);
                states.Add("front_" + stateNames[i], i);
                states.Add("back_" + stateNames[i], i);
                states.Add("0_" + stateNames[i], i);
                states.Add("45_" + stateNames[i], i);
                states.Add("90_" + stateNames[i], i);
                states.Add("135_" + stateNames[i], i);
                states.Add("180_" + stateNames[i], i);
                states.Add("225_" + stateNames[i], i);
                states.Add("270_" + stateNames[i], i);
            }

            foreach (AnimationClip newClip in clips)
            {
                UnityEditor.Animations.AnimatorState state = sm.AddState(newClip.name);
                //			state.SetAnimationClip(newClip,layer);
                state.motion = newClip;
//				UnityEditor.Animations.AnimatorTransition trans = sm.AddEntryTransition(state);

//				if(states.ContainsKey(newClip.name))
//				{
//					trans.AddCondition(UnityEditor.Animations.AnimatorConditionMode.Equals, states[newClip.name], "stage");
//				}
//
//				if(newClip.name.IndexOf("front_") != -1)
//				{
//					trans.AddCondition(UnityEditor.Animations.AnimatorConditionMode.Greater, 89, "angle");
//				}
//
//				if(newClip.name.IndexOf("back_") != -1)
//				{
//					trans.AddCondition(UnityEditor.Animations.AnimatorConditionMode.Less, 90, "angle");
//				}
//
//				//
//				UnityEditor.Animations.AnimatorStateTransition animatorStateTransition = state.AddExitTransition(true);
//				animatorStateTransition.exitTime = 0f;
//				animatorStateTransition.duration = 0f;

                if (newClip.name.IndexOf("idle") != -1)
                {
                    sm.defaultState = state;
                }
            }
            AssetDatabase.SaveAssets();
            return(animatorController);
        }