判断动画是否播完

    private bool m_bPlayStart = false;   

                 if (m_bPlayStart)
                    {
                        if (!m_kMonsterAnimation.IsPlaying(m_sAttackName))
                        {
                            m_nStartState = EMEMY_CHASE;
                            m_fAttackCDTimer = fAttackCD; //重置CD
                            m_bPlayStart = false;
                            fbOnlyChangeState = true;
                        }
                    } 
                    else
                    {
                        if (m_fAttackCDTimer == 0)
                        {//攻击已冷却:攻击
                            m_nStartState = EMEMY_ATTACK;
                            m_bPlayStart = true;
                        }
                        else
                        {
                            m_nStartState = EMEMY_ATTACK_IDLE;
                        }
                    }

                    //第一种:差值来获取动画播放完毕
                    //float fCurNormalizedTime = m_kAccackState.normalizedTime;
                    ////当两帧的差值<0时,动画播放完毕,并重新开始了。
                    //if (fCurNormalizedTime - m_fLastNormalizedTime <= 0)
                    //{
                    //    m_nStartState = EMEMY_IDLE;
                    //    m_fAttackCDTimer = fAttackCD; //重置CD
                    //}
                    //m_fLastNormalizedTime = fCurNormalizedTime;

                    /*
                    //第二种:动画修改成WrapMode.Loop或WrapMode.ClampForever后,动画时间才能0-1,默认是once,会因为采样不准确,值永远!=1的情况。
                    //攻击结束后,重置CD,并开始CD计时
                    if ((aAccackState.normalizedTime) >= 1) //
                    {   //  AnimatorStateInfo.normalizedTime 归一化时间
                        // 整数部分是时间状态的已循环数。小数部分是当前循环的百分比进程(0-1)。
                        nStartState = EMEMY_IDLE;
                        mAttackCDTimer = fAttackCD;
                    }
                    */

                    //第三种:通过事件触发
                    //if (bPlayEnd)
                    //{
                    //    nStartState = EMEMY_IDLE;
                    //    mAttackCDTimer = fAttackCD;
                    //    bPlayEnd = false;
                    //} 

                    // Debug.Log("attack001 normalizedTime = " + fCurNormalizedTime);
                    break;

 

posted @ 2015-07-17 15:33  MATU  阅读(479)  评论(0)    收藏  举报