// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks //override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { AnimatorInfo info = new AnimatorInfo(); info.animator = animator; info.status = AnimActionStatus.Exit; info.nameHash = stateInfo.shortNameHash; NotifyManager.SendNotify(NotifyType.OnAnimatorUpdate, info); }
static void AddAnimatorState(AnimatorController controller, AnimatorControllerLayer currLayer, int width, int height, string pName) { for (int j = 1; j < (int)AnimatState.AnimaState_MAX; j++) { AnimatorState state = currLayer.stateMachine.AddState(((AnimatState)j).ToString(), new Vector3((j / 5 + 1) * width, j % 5 * height, 0)); if (j == (int)AnimatState.AnimaState_IDLE) { currLayer.stateMachine.defaultState = state; //设置默认状态 } AnimatorInfo info = InfoMgr <AnimatorInfo> .Instance.GetInfo(j); AnimationClip clip = (AnimationClip)AssetDatabase.LoadAssetAtPath(AppConst.AssetPath + "/AnimationClip/" + pName + "/" + info.name + ".anim", typeof(AnimationClip)); controller.SetStateEffectiveMotion(state, clip); } }
public override void Deserialize(BinaryReader binaryReader) { var transformInfoArrayLength = binaryReader.ReadInt32(); Value.Clear(); for (int i = 0; i < transformInfoArrayLength; i++) { var animatorInfo = new AnimatorInfo(); animatorInfo.ID = binaryReader.ReadInt32(); animatorInfo.Op = (EOperateAnimator_InternalOperate)binaryReader.ReadByte(); animatorInfo.StateName = binaryReader.ReadString(); animatorInfo.VariableName = binaryReader.ReadString(); animatorInfo.VariableValue_Int = binaryReader.ReadInt32(); animatorInfo.VariableValue_Float = binaryReader.ReadSingle(); animatorInfo.VariableValue_Bool = binaryReader.ReadBoolean(); Value.Add(animatorInfo); } }
//----- method ----- private void Initialize() { var animator = UnityUtility.GetOrAddComponent <Animator>(gameObject); if (animator == null) { return; } if (isInitialized) { return; } animator.runtimeAnimatorController = animatorController; animatorInfo = new AnimatorInfo(animator); Stop(); Refresh(); isInitialized = true; }
static void AddTransition(AnimatorControllerLayer controllLayer) { ChildAnimatorState[] states = controllLayer.stateMachine.states; for (int i = 0; i < (int)AnimatState.AnimaState_MAX - 1; i++) { if (i < states.Length) { AnimatorInfo info = InfoMgr <AnimatorInfo> .Instance.GetInfo(i + 1); if (null == info) { Debug.LogError("AnimatorInfo is Null"); continue; } AnimatorState currentState = states[i].state; if (info.idle == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_IDLE - 1].state, false); } if (info.walk == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_WALK - 1].state, false); } if (info.free == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_FREE - 1].state, false); } if (info.atk1 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_ATK1 - 1].state, false); } if (info.atk2 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_ATK2 - 1].state, false); } if (info.atk3 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_ATK3 - 1].state, false); } if (info.skill1 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_SKILL1 - 1].state, false); } if (info.skill2 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_SKILL2 - 1].state, false); } if (info.skill3 == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_SKILL3 - 1].state, false); } if (info.die == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_DIE - 1].state, false); } if (info.live == 1) { AddTransition(currentState, states[(int)AnimatState.AnimaState_LIVE - 1].state, false); } } } }
public AnimationClip AddAnimationClip(string name) { AnimatorInfo clip = null; if (animationClips.TryGetValue (name, out clip)) { return new AnimationClip (name, clip.ClipBones, clip.ModelExtra.Clips[0]); } #if BIONICK Model model = Bionick.Game.Base.Game.Instance.Content.Load<Model>("Models/Animation/" + name); #else Model model = game.Content.Load<Model>("Animations/" + name); #endif if (model == null) return null; ModelExtra extra = model.Tag as ModelExtra; if (extra == null) return null; if (extra.Clips.Count != 1) return null; int boneCount = extra.Clips[0].Bones.Count; ClipBone[] clipBones = new ClipBone[boneCount]; for(int i = 0; i < clipBones.Length; i++) { ModelViewerAux.AnimationClip.Bone bone = extra.Clips[0].Bones[i]; clipBones[i] = new ClipBone(bone, FindBone(bone.Name)); } clip = new AnimatorInfo (); clip.ModelExtra = extra; clip.ClipBones = clipBones; animationClips.Add (name, clip); AnimationClip info = new AnimationClip (name, clip.ClipBones, clip.ModelExtra.Clips[0]); return info; }