[英]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.