Unity如何判断Animator当前播放的动画已经结束
今天工作中遇到了一个问题,判断当前的动画什么时候播放完成,然后作出下一步动作,然后积累了下代码,发布了出来!
这里我使用的关键方法为:AnimatorStateInfo stateInfo;stateInfo.normalizedTime >= 1.0f 来表示动画的标准化时间已经达到或超过1.0,即动画的播放进度
具体内容如下:
首先,示例为场景中有一个角色,自带有一个Animator,即myAnimator,并且有一个动画状态-Attack,我们要播放这个动画,当动画播放结束后打印一条信息
代码如下
public class MyPanel : MonoBehaviour
[SerializeField]
private Button m_BeginAniBt;
[SerializeField]
private Animator myAnimator;
private bool m_CurState = false;
void Start()
{
m_BeginAniBt.onClick.AddListener(OnBeginAni);
}
public void OnBeginAni()
{
myAnimator.Play("Attack");
m_CurState = true;
}
void Update()
{
AnimatorStateInfo stateInfo = myAnimator.GetCurrentAnimatorStateInfo(0);
if(m_CurState)
{
if (stateInfo.IsName("Base Layer.Attack"))
{
//判断当前是否播放超过1.0f,即播放完成
if (stateInfo.normalizedTime >= 1.0f)
{
m_CurState = false;
//Attack攻击动画完成
Debug.Log("Attack End");
}
}
}
}