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;