如何计算冷却时间和持续时间

时间:2019-07-01 00:04:14

标签: c# unity3d 2d repeat ienumerator

在我正在开发的小型模拟游戏(A.I.飞船射击游戏)中,我试图提出一种有效的屏蔽功能或IEnumerator,可以调用或启动该功能或执行多项操作:

  • 计算盾牌的冷却时间是否大于零
  • 如果冷却时间结束,则在设置的持续时间内(5秒)激活护盾
  • 持续时间到期后停用盾牌

但是,仅使用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的方法,因为必须至少每秒调用一次,但由于当前环境很小,这似乎不是问题。

>

感谢您的帮助。

1 个答案:

答案 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
}

}