当我点击攻击按钮时,我的播放器Robot
正在攻击,如下所示。我使用coroutine
等待一段时间然后实例化激光形式firepos
位置。
现在,如果您看到上述gif
,您可以看到,如果我按住攻击按钮,则播放器正在根据waitForSeconds
{{1一秒后激光射击。到现在为止还好!
但是当我在很短的时间内突然点击按钮时,动画不会播放(我可以理解......显而易见!)但是就像上面的情况一段时间后(由于coroutine
)和由于没有时间我点击同样没有激光拍摄我不想要 !
我想要的是,当我点击并按住攻击按钮时,动画应该完成,然后激光应该拍摄。
和
如果我在很短的时间内轻拍多次,那么激光(是一个预制的实例化)不应该拍摄。
只有在动画完成时,激光才能拍摄 。
现在我无法理解这一点!任何身体都可以帮助。
检查员中的按钮(攻击):
我在waitforseconds
和OnpointerDown
功能代码:
up
和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;
}
对于缺乏知识,请帮助和抱歉...伙计们,我们这样!
答案 0 :(得分:1)
可以通过两种方法解决您的问题。
首先,如果按钮被释放,你可以停止协程。
你可以使用IPointerUpHandler(我假设你从UI按钮调用方法)
public class InputHandler, MonoBehaviour, IPointerUpHandler
{
IEnumerator coroutine = null;
public void LaserAttack(){
isAttacking = true;
this.coroutine = AttackStillCoroutine ()
StartCoroutine (this.coroutine);
// More code
}
public void OnPointerUp(PointerEventData eventData)
{
if(this.isAttacking == true && this.coroutine != null ){
StopCoroutine(this.coroutine);
this.coroutine = null;
}
}
}
我推荐的另一种方法是使用AnimationEvent。您可以将一个方法委托放置到动画中,这样当它到达时,该方法就会被调用。
我会粘贴链接,因为它比代码更直观:
https://docs.unity3d.com/Manual/animeditor-AnimationEvents.html