在我正在开发的小型模拟游戏(A.I.飞船射击游戏)中,我试图提出一种有效的屏蔽功能或IEnumerator,可以调用或启动该功能或执行多项操作:
但是,仅使用Ienumerator尝试时会遇到一些问题。我曾经能够使用IEnumerators来倒数计时器和冷却时间,但是尝试进行冷却时间和持续时间似乎都不起作用,因为Unity不允许我不离开IEnumerator就两次WaitForSeconds。
类似地,每艘船都有一个炮塔,并且在炮塔内部是一个IEnumerator,它可以发射或减少其冷却时间,视情况而定。
$("#formulario").steps({});
$('.radio_button').iCheck({
checkboxClass: 'icheckbox_square-green',
radioClass: 'iradio_square-green',
});
通过使用// Fire continuously if in range and we have more than 1 shot left
// Otherwise, reload for (rate) seconds and reset shots left
public IEnumerator Fire(Vector2 target) {
firing = true;
if (cooldown <= 0) {
if (bullets > 0) {
// Fire a bullet
bullets--;
// Instatiate the bullet
}
} else {
// Reload
cooldown = rate;
bullets = count;
}
} else {
yield return new WaitForSeconds(1);
cooldown--;
}
firing = false;
yield break;
}
标志来调用Fire Coroutine,以检查其是否正在运行以及是否未调用
firing
每秒钟左右(如果飞船还活着并且我们有目标)。
我确实不建议使用当前使用IEnumerator的方法,因为必须至少每秒调用一次,但由于当前环境很小,这似乎不是问题。
>感谢您的帮助。
答案 0 :(得分:0)
没有协程的快速代码,不知道它是否适用于游戏。我希望可以给你一些想法。
public class Shield : MonoBehaviour {
public float duration;
public float cooldown;
public float lastActivated;
public bool IsActivated => (lastActivated - (Time.time - duration)) > 0;
public bool onCoolDown => (lastActivated - (Time.time - cooldown)) > 0;
public void Activate(){
if(onCoolDown) return;
lastActivated = Time.time;
}
void LateUpdate(){
if(IsActivated) //Show shield effects, blahblah
else //Do nothing, blahblah
}
}