繁体   English   中英

努力在 Unity3D 中创建循环计时器

[英]struggling with creating a looped timer in Unity3D

我正在开发一个玩家是一块冰的游戏,玩家自然会融化,我决定只减少玩家的 Y 比例。 问题是,我不确定如何设置计时器来做到这一点。 我知道 Invoke,并试图将 Invoke 放入 Update,但是 Invoke,一旦计时器到了,它就会继续运行循环,这不是我想要的。

图表

这张图就是我的意思,我希望 function 每隔指定的秒运行一次,一旦代码运行一次,它就会重新启动循环,再过一秒,它将再次运行代码并且很快。

go 关于这个有很多不同的方法。 最直接的方法之一就是使用 Update 方法来增加计数器,直到达到超时。 IE

[SerializeField] private float timeout = 1f;

float _counter = 0f;

private void Update()
{
  _counter += Time.deltaTime;
  if ( _counter >= timeout )
  {
    _counter -= timeout;
    // Now do something at timeout
    ..
  }
}

另一种选择是使用协程。

void Start()
{
  StartCoroutine(Melt());
}

void IEnumerator Melt()
{
  while ( true ) // or check if player is alive
  {
    yield return new WaitForSeconds (1f);
    // perform melted function here
    ..
  }
}

另一种选择是使用这里描述的 InvokeRepeating。 它非常像协程实现,但为您隐藏了大部分工作。 在您的情况下,它看起来像:

void Start()
{
  InvokeRepeating (“Melted”, 1f, 1f);
}

void Melted()
{
  // do your melted code
  ..
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM