播放

时间:2017-01-22 08:01:40

标签: c# animation unity3d unity5 unity3d-2dtools

在统一中,我们知道当动画播放时它会自行循环(重放),这对于动画动画(步行,跑步,跳跃)很有用。

但在我的情况下,它引起了一种奇怪的效果,如图所示:

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

现在该如何实现呢?

1 个答案:

答案 0 :(得分:3)

解决方案是创建一个新的动画攻击并使用coroutine

因为我们希望在攻击动画之后播放另一个动画,并且当它结束时停止两个动画(攻击) 达到理想的输出。

在动画师的照片中看到突出显示的一个: 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);

        }

美好而简单......