当我点击攻击按钮时,我的玩家Robot
会进行攻击。 我正在使用coroutine
等待一段时间,然后从firepos
位置实例化激光。
请看下面的gif
以便更好的理解:
![error in shoot time](https://istack.dev59.com/OKLDi.gif)
现在,如果您看上面的gif
,您会发现,如果我按住攻击按钮,玩家会进行动画,并根据waitForSeconds
coroutine
在一秒钟后射出激光。这很好!
但是,当我在短时间内多次突然点击按钮时,动画不播放(我可以理解...这是显而易见的!),但是类似于上述情况,由于waitforseconds
和由于我点击了几次
,同样数量的激光射出,这是我不想要的!
我想要的是:当我单击并按住攻击按钮时,动画应该完成,然后才能射出激光。
并且
如果我在短时间内多次点击该按钮,则不应射出激光(它是一个预制件被实例化)。
只有当动画完成后,激光才会射出。
现在我无法解决这个问题! 有人能帮忙吗?
在检查器中对攻击按钮进行设置:
我在OnpointerDown
和up
中调用两个函数
函数代码:
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 DelayMethodLeftInstantiate(){
yield return new WaitForSeconds(1);
Instantiate (leftLaser, firep.position, Quaternion.identity);
}
IEnumerator DelayMethodRightInstantiate(){
yield return new WaitForSeconds(1);
Instantiate (RightLaser, firep.position, Quaternion.identity);
}
请帮忙,对不起我对这方面的知识很少...大家好,我是新手!