Bootstrap

unity普通操作:animator播放,暂停,判断播放完成【(增加1个判断如果这个是动画融合的情况)】

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();
    }

;