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);//(增加1个判断如果这个是动画融合的情况!)为什么我会先判断animator是否进入我们想要播放的动画 比如我们想播放attack这个动画 但是当它在 idle转向attack的时候 animator会有一个动画融合//当开始播放attack动画的时候他不会立即进入而是回在idle -> attack的过程中 而返回的名字仍然是idle 所以要判断是否进入attack动画while (!enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName(playAnimationName)){yield return null;}while (enemyAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < animationTime){yield return null;}//Debug.Log("播放完毕");SetPlayAnimation(playAnimationName, false);action?.Invoke();
}