Для устаревшей системы анимации, Animation.IsPlaying("TheAnimatonClipName)
используется, чтобы проверить, воспроизводится ли анимационный клип.
Для новой системы Mechanim Animator, вы должны проверить, если anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName)
и anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
верно.Если они есть, то название анимации в данный момент воспроизводится.
Это можно упростить, как функцию, подобную функции Animation.IsPlaying
выше.
bool isPlaying(Animator anim, string stateName)
{
if (anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName) &&
anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
return true;
else
return false;
}
Теперь все работает ... но единственная проблема, которая у меня естьзаключается в следующем: если я нахожусь в процессе перезагрузки и нажимаю mouse0 (стрелять), состояние анимации немедленно меняется на съемку ... но я хочу заблокировать это.
Когда кнопка съемкинажмите, проверьте, воспроизводится ли анимация «перезагрузки».Если это так, не стреляйте.
public Animator m4a4animator;
int animLayer = 0;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
m4a4animator.Play("reload");
}
//Make sure we're not reloading before playing "shoot" animation
if (Input.GetMouseButton(0) && !isPlaying(m4a4animator, "reload"))
{
m4a4animator.Play("shoot");
}
}
bool isPlaying(Animator anim, string stateName)
{
if (anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName) &&
anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
return true;
else
return false;
}
Если вам нужно дождаться окончания анимации «перезагрузки», прежде чем воспроизводить анимацию «съемки», используйте сопрограмму. В этом посте описано, как это сделать.