/// <summary>
        /// 主角的动画控制
        /// </summary>
        /// <returns></returns>
        IEnumerator ControlHeroAnimationState()
        {
            while (true)
            {
                yield return(new WaitForSeconds(0.1F));

                switch (CurrentActionState)
                {
                case HeroActionState.NormalAttack:
                    /* 攻击连招处理(自动状态转换) */
                    switch (_CurATKCombo)
                    {
                    case NormalATKComboState.NormalATK1:
                        _CurATKCombo = NormalATKComboState.NormalATK2;
                        _AnimationHandle.CrossFade(Ani_NormalAttack1.name);
                        AudioManager.PlayAudioEffectA("BeiJi_DaoJian_3");
                        yield return(new WaitForSeconds(Ani_NormalAttack1.length / 2.5F));

                        _CurrentActionState = HeroActionState.Idle;
                        break;

                    case NormalATKComboState.NormalATK2:
                        _CurATKCombo = NormalATKComboState.NormalATK3;
                        _AnimationHandle.CrossFade(Ani_NormalAttack2.name);
                        AudioManager.PlayAudioEffectA("BeiJi_DaoJian_2");
                        yield return(new WaitForSeconds(Ani_NormalAttack2.length / 2.5F));

                        _CurrentActionState = HeroActionState.Idle;
                        break;

                    case NormalATKComboState.NormalATK3:
                        _CurATKCombo = NormalATKComboState.NormalATK1;
                        _AnimationHandle.CrossFade(Ani_NormalAttack3.name);
                        AudioManager.PlayAudioEffectA("BeiJi_DaoJian_1");
                        yield return(new WaitForSeconds(Ani_NormalAttack3.length / 2F));

                        _CurrentActionState = HeroActionState.Idle;
                        break;

                    default:
                        break;
                    }
                    break;

                case HeroActionState.MagicTrickA:
                    _AnimationHandle.CrossFade(Ani_MagicTrickA.name);
                    AudioManager.PlayAudioEffectA("SwordHero_MagicA");
                    yield return(new WaitForSeconds(Ani_MagicTrickA.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case HeroActionState.MagicTrickB:
                    _AnimationHandle.CrossFade(Ani_MagicTrickB.name);
                    AudioManager.PlayAudioEffectA("SwordHero_MagicB");
                    yield return(new WaitForSeconds(Ani_MagicTrickB.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case HeroActionState.MagicTrickC:
                    _AnimationHandle.CrossFade(Ani_MagicTrickC.name);
                    AudioManager.PlayAudioEffectA("SwordHero_MagicC");
                    yield return(new WaitForSeconds(Ani_MagicTrickC.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case HeroActionState.MagicTrickD:
                    _AnimationHandle.CrossFade(Ani_MagicTrickD.name);
                    AudioManager.PlayAudioEffectA("SwordHero_MagicD");
                    yield return(new WaitForSeconds(Ani_MagicTrickD.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case HeroActionState.None:
                    break;

                case HeroActionState.Idle:
                    _AnimationHandle.CrossFade(Ani_Idle.name);
                    break;

                case HeroActionState.Runing:
                    _AnimationHandle.CrossFade(Ani_Runing.name);
                    //处理主角跑动音效
                    AudioManager.PlayAudioEffectB(AcHeroRuning);
                    yield return(new WaitForSeconds(AcHeroRuning.length));

                    break;

                default:
                    break;
                }
            }
        }
Example #2
0
    /// <summary>
    /// 主角休息,移动,普攻,技能输出等动画操作
    /// 无限循环,等待0.05s执行一次
    /// </summary>
    /// <returns></returns>
    IEnumerator ControlHeroAnimationState()
    {
        while (true)
        {
            yield return(new WaitForSeconds(0.03F));

            switch (CurrentActionState)
            {
            case HeroActionState.NormalAttack:
                /* 攻击连招处理(自动状态转换) */
                switch (_CurATKCombo)
                {
                case NormalATKComboState.NormalATK1:
                    _CurATKCombo = NormalATKComboState.NormalATK2;
                    _AnimationHandle.CrossFade(Ani_NormalAttack1.name);
                    yield return(new WaitForSeconds(Ani_NormalAttack1.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case NormalATKComboState.NormalATK2:
                    _CurATKCombo = NormalATKComboState.NormalATK3;
                    _AnimationHandle.CrossFade(Ani_NormalAttack2.name);
                    yield return(new WaitForSeconds(Ani_NormalAttack2.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                case NormalATKComboState.NormalATK3:
                    _CurATKCombo = NormalATKComboState.NormalATK1;
                    _AnimationHandle.CrossFade(Ani_NormalAttack3.name);
                    yield return(new WaitForSeconds(Ani_NormalAttack3.length));

                    _CurrentActionState = HeroActionState.Idle;
                    break;

                default:
                    break;
                }    //Switch Combo End
                break;

            case HeroActionState.MagicTrickA:
                _AnimationHandle.CrossFade(Ani_MagicTrickA.name);
                yield return(new WaitForSeconds(Ani_MagicTrickA.length));

                _CurrentActionState = HeroActionState.Idle;
                break;

            case HeroActionState.MagicTrickB:
                _AnimationHandle.CrossFade(Ani_MagicTrickB.name);
                yield return(new WaitForSeconds(Ani_MagicTrickB.length));

                _CurrentActionState = HeroActionState.Idle;
                break;

            case HeroActionState.None:
                break;

            case HeroActionState.Idle:
                //Idle操作即走即停,不需要等待时间
                _AnimationHandle.CrossFade(Ani_Idle.name);
                break;

            case HeroActionState.Runing:
                //Run操作即走即停,不需要等待时间
                _AnimationHandle.CrossFade(Ani_Runing.name);
                break;

            default:
                break;
            }//Switch CurrentActionState End
        }
    }
        /// <summary>
        /// 主角的动画控制
        /// </summary>
        private IEnumerator ControlHeroAnimationState()
        {
            while (true)
            {
                yield return(new WaitForSeconds(0.1f));

                switch (curActionState)
                {
                case HeroActionState.None:
                    break;

                case HeroActionState.Idle:
                    animHandle.CrossFade(AniIdle.name);
                    break;

                case HeroActionState.Run:
                    animHandle.CrossFade(AniRun.name);
                    break;

                case HeroActionState.NormalAttack:
                    //连招处理
                    switch (curATKState)
                    {
                    case NormalATKComboState.NormalATK1:

                        curATKState = NormalATKComboState.NormalATK2;
                        if (isSinglePlay)
                        {
                            animHandle.CrossFade(AninormalAttack1.name);
                            isSinglePlay = false;
                            yield return(new WaitForSeconds(AninormalAttack1.length / 2.5f));
                        }
                        else
                        {
                            StartCoroutine(ReturnToIdle());
                        }

                        break;

                    case NormalATKComboState.NormalATK2:
                        curATKState = NormalATKComboState.NormalATK3;
                        if (isSinglePlay)
                        {
                            animHandle.CrossFade(AninormalAttack2.name);
                            isSinglePlay = false;
                            yield return(new WaitForSeconds(AninormalAttack2.length / 2.5f));
                        }
                        else
                        {
                            StartCoroutine(ReturnToIdle());
                        }
                        break;

                    case NormalATKComboState.NormalATK3:
                        curATKState = NormalATKComboState.NormalATK1;
                        if (isSinglePlay)
                        {
                            animHandle.CrossFade(AninormalAttack3.name);
                            isSinglePlay = false;
                            yield return(new WaitForSeconds(AninormalAttack3.length / 2f));
                        }
                        else
                        {
                            StartCoroutine(ReturnToIdle());
                        }
                        break;

                    default:
                        break;
                    }
                    if (isSinglePlay)
                    {
                        animHandle.CrossFade(AninormalAttack1.name);
                        isSinglePlay = false;
                        yield return(new WaitForSeconds(AninormalAttack1.length));
                    }
                    else
                    {
                        StartCoroutine(ReturnToIdle());
                    }
                    break;

                case HeroActionState.MagicTrickA:
                    if (isSinglePlay)
                    {
                        animHandle.CrossFade(AniMagicTrickA.name);
                        isSinglePlay = false;
                        yield return(new WaitForSeconds(AniMagicTrickA.length));
                    }
                    else
                    {
                        StartCoroutine(ReturnToIdle());
                    }
                    break;

                case HeroActionState.MagicTrickB:
                    if (isSinglePlay)
                    {
                        animHandle.CrossFade(AniMagicTrickB.name);
                        isSinglePlay = false;
                        yield return(new WaitForSeconds(AniMagicTrickB.length));
                    }
                    else
                    {
                        StartCoroutine(ReturnToIdle());
                    }
                    break;

                default:
                    break;
                }
            }
        }