/// <summary> /// 更新当前动画剪辑的状态 /// </summary> /// <returns></returns> private void UpdateAnimationClipTypeState() { //获取不是结束状态的对象 AnimationClipTypeState animationClipTypeState = animationClipTypeStateList.FirstOrDefault(temp => temp.TimeType != EnumAnimationClipTimeType.Out); iAnimatorState.AnimationClipTypeState = animationClipTypeState; }
/// <summary> /// 动画进入离开或触发条件时 /// </summary> /// <param name="animationClipType"></param> /// <param name="clipTimeType"></param> /// <param name="normalizedTime"></param> private void PlayerAnimRunningState_AnimRunningStateHandle(EnumAnimationClipType animationClipType, EnumAnimationClipTimeType clipTimeType, float normalizedTime) { AnimationClipTypeState animationClipTypeState = animationClipTypeStateList.FirstOrDefault(temp => temp.AnimationClipType == animationClipType); if (animationClipTypeState == null) { animationClipTypeState = new AnimationClipTypeState() { AnimationClipType = animationClipType }; animationClipTypeStateList.Add(animationClipTypeState); } animationClipTypeState.TimeType = clipTimeType; animationClipTypeState.ClipTime = normalizedTime; Action SetAttackAction = () => { bool allOut = animationClipTypeStateList.Where(temp => temp.AnimationClipType == EnumAnimationClipType.Attack1 || temp.AnimationClipType == EnumAnimationClipType.Attack2 || temp.AnimationClipType == EnumAnimationClipType.Attack3 ).ToList().TrueForAll(temp => temp.TimeType == EnumAnimationClipTimeType.Out); if (allOut) { iAnimatorState.IsPhycisActionState = false; iAnimatorState.PhycisActionNowType = 0; } else { iAnimatorState.IsPhycisActionState = true; } }; switch (animationClipType) { case EnumAnimationClipType.Move: break; //当动作进入攻击1 攻击2 攻击3时分别设置对应的物理动作(普通攻击)阶段为对应的阶段 //当退出动作时设置动作为0(无攻击) case EnumAnimationClipType.Attack1: SetAttackAction(); if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.PhycisActionNowType = 1; } break; case EnumAnimationClipType.Attack2: SetAttackAction(); if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.PhycisActionNowType = 2; } break; case EnumAnimationClipType.Attack3: if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.PhycisActionNowType = 3; } else if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.PhycisActionNowType = 0; } SetAttackAction(); break; case EnumAnimationClipType.MagicSing: if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.IsMagicActionState = true; } break; case EnumAnimationClipType.MagicShot: if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.IsMagicActionState = true; } else if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.IsMagicActionState = false; } break; case EnumAnimationClipType.PhysicSkill: if (clipTimeType == EnumAnimationClipTimeType.In) { iAnimatorState.IsSkillState = true; } else if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.IsSkillState = false; } break; case EnumAnimationClipType.Dizzy: if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.PhycisActionNowType = 0; iAnimatorState.IsPhycisActionState = false; iAnimatorState.IsSkillState = false; iAnimatorState.IsMagicActionState = false; iAnimatorState.IsGetHitAnimator = false; playerAnimator.SetLayerWeight(1, 0f); } break; case EnumAnimationClipType.Roll: break; case EnumAnimationClipType.GetHit: if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.PhycisActionNowType = 0; iAnimatorState.IsPhycisActionState = false; iAnimatorState.IsSkillState = false; iAnimatorState.IsMagicActionState = false; iAnimatorState.IsGetHitAnimator = false; playerAnimator.SetLayerWeight(1, 0f); } break; case EnumAnimationClipType.Death: if (clipTimeType == EnumAnimationClipTimeType.Out) { iAnimatorState.PhycisActionNowType = 0; iAnimatorState.IsPhycisActionState = false; iAnimatorState.IsSkillState = false; iAnimatorState.IsMagicActionState = false; iAnimatorState.IsGetHitAnimator = false; iAnimatorState.IsDeathAnimator = false; playerAnimator.SetLayerWeight(1, 0f); } else if (clipTimeType == EnumAnimationClipTimeType.In) //进入死亡状态 { iAnimatorState.IsDeathAnimator = true; } break; } UpdateAnimationClipTypeState(); }