在 unity 中,我们知道当动画播放时它会自行循环(重播),这对运动动画(走路、运行、跳跃)很有用。
但在我的例子中,它造成了一种奇怪的效果,如图所示:
现在,当我单击并按住按钮时,我想要的是角色应该举起他的 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;
}
现在如何实现呢?
最佳答案
解决方案是创建一个新的玩家attack still动画并使用coroutine
因为我们希望在攻击动画之后播放另一个动画,当它结束时停止两个动画(攻击) 以达到预期的输出。
在代码中:
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/