2017-01-22 274 views
1

统一起来,我们知道当动画播放时会循环播放(重放),这对移动动画(走路,跑步,跳跃)很有好处。停止动画(攻击)在播放时循环播放

但对我来说这是导致一个奇怪的效果,如图图:

errorloop

现在,当我点击并按住按钮,我想那是什么the character should take his arm up and then keep it不像一次又一次地把它直到我没有从按钮上释放我的手指。

Bcoz它的一个攻击动画这就是为什么我不想要它!

攻击脚本和动画调用如下:

public void LaserAttack(){ 
     isAttacking = true; 
     if (robotLeft == true&&isLaserLeft==false) { 

      //Debug.Log (firep.position.x); 

      //Instantiate (leftLaser, firep.position*1.29f, Quaternion.identity); 

      StartCoroutine(DelayMethodLeftInstantiate()); 

     } 

     if (robotRight == true&&isLaserLeft==false) { 

      StartCoroutine( DelayMethodRightInstantiate()); 

      //Instantiate (RightLaser, firep.position, Quaternion.identity); 
     } 
     anim.SetBool ("isAttack", isAttacking); 
     isLaserLeft = true; 

    } 

    public void LaserAttackEnd(){ 
     isAttacking = false; 

     anim.SetBool ("isAttack", isAttacking); 
     isLaserLeft = false; 
} 

我在触摸按钮调用的攻击动画如下! enter image description here

现在该怎么实现呢?

回答

3

解决方案是创建玩家攻击的一个新的动画仍然和使用coroutine

,因为我们希望刚过攻击动画和播放另一个动画何时结束同时停止动画(攻击) 实现期望的输出。

看到动画突出一个在PIC: enter image description here

和代码:

public void LaserAttack(){ 
     isAttacking = true; 
     StartCoroutine (AttackStillCoroutine()); 

     if (robotLeft == true&&isLaserLeft==false) { 

      //Debug.Log (firep.position.x); 

      //Instantiate (leftLaser, firep.position*1.29f, Quaternion.identity); 

      StartCoroutine(DelayMethodLeftInstantiate()); 

     } 

     if (robotRight == true&&isLaserLeft==false) { 

      StartCoroutine( DelayMethodRightInstantiate()); 

      //Instantiate (RightLaser, firep.position, Quaternion.identity); 
     } 
     anim.SetBool ("isAttack", isAttacking); 
     isLaserLeft = true; 

    } 

    public void LaserAttackEnd(){ 
     isAttacking = false; 
     attackStill = false; 
     anim.SetBool ("isAttackStill",attackStill); 
     anim.SetBool ("isAttack", isAttacking); 
     isLaserLeft = false; 

    } 

协程如下:

IEnumerator AttackStillCoroutine(){ 

      yield return new WaitForSeconds (1); 
      attackStill = true; 
      anim.SetBool ("isAttackStill",attackStill); 

     } 

尼斯和简单...