1.播放,暂停
anim.CrossFade("s2", 0);
anim.speed=0;//暂停
anim.speed=1;//播放
判断播放完成(Update方式)
void Update(){
AnimatorStateInfo stateinfo2 = anim.GetCurrentAnimatorStateInfo(0);
//判断名字 这里 也是预判有动画融合的情况,如果没有动画融合 可以去掉名字判断 增加效率
if (stateinfo2.IsName("s2") && stateinfo2.normalizedTime >= 1.0f)
{
//播放完成的代码。
}
}
判断播放完成 (协程方式)
//playAnimationName 将要播放动画的名字 animationTime 播放到某一时刻(0 - 1播放完) action回掉//enemyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime 当返回的值大于1的时候该动画已经播放完毕
public IEnumerator PlayAnimation(string playAnimationName, float animationTime, System.Action action)
{
//设置要播放的动画名称
//SetPlayAnimation(playAnimationName, true);
ator.Play(playAnimationName);
//(增加1个判断如果这个是动画融合的情况!)为什么我会先判断animator是否进入我们想要播放的动画 比如我们想播放attack这个动画 但是当它在 idle转向attack的时候 animator会有一个动画融合
//当开始播放attack动画的时候他不会立即进入而是回在idle -> attack的过程中 而返回的名字仍然是idle 所以要判断是否进入attack动画
while (!ator.GetCurrentAnimatorStateInfo(0).IsName(playAnimationName))
{
yield return null;
}
while (ator.GetCurrentAnimatorStateInfo(0).normalizedTime < animationTime)
{
yield return null;
}
Debug.Log("播放完毕");
//SetPlayAnimation(playAnimationName, false);
action?.Invoke();
}