在统一中,我们知道当动画播放时它会自行循环(重放),这对于动画动画(步行,跑步,跳跃)很有用。
但在我的情况下,它引起了一种奇怪的效果,如图所示:
现在,当我点击并按住按钮时,我想要的是 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;
}
现在该如何实现呢?
答案 0 :(得分:3)
解决方案是创建一个新的动画攻击并使用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);
}
美好而简单......