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); }
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); }