c# - 播放时停止动画(攻击)循环播放

标签 c# animation unity3d unity3d-2dtools

在 unity 中,我们知道当动画播放时它会自行循环(重播),这对运动动画(走路、运行、跳跃)很有用。

但在我的例子中,它造成了一种奇怪的效果,如图所示:

errorloop

现在,当我单击并按住按钮时,我想要的是角色应该举起他的 ARM 然后保持不动,这与一次又一次地举起直到我这样做不同不要从按钮上松开我的手指。

因为它是一个攻击动画,所以我不想要它!

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

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

现在如何实现呢?

最佳答案

解决方案是创建一个新的玩家attack still动画并使用coroutine

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

在 animator 中查看图片中突出显示的一个: 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);

        }

简单又好...

关于c# - 播放时停止动画(攻击)循环播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788653/

相关文章:

c# - 使用c#一次接受多个tcp连接

c# - GetCommandLineArgs 没有返回我预期的结果

javascript - 使用变量时不执行 setTimeout() 方法

c# - 十年后C#的 future 将是什么?

c# - unity 3d碰撞时相机抖动

c# - 如何将数组从 C++ 库传递到 C#

c# - 通过字符串获取c#动态属性的值

c# - 将新表添加到 .NET 后端 Windows Azure 移动服务

iOS - TableView willDisplayCell 动画仅在用户向下滚动而不是顶部时发生

ios - 在 Mapbox 上动画调度标记