Art*_*kin 0 c# unity-game-engine
我想在 Update 方法中每 1 秒从设定值中消耗健康值。我写了代码,但它似乎耗尽的速度超过 1 秒。
在 Update 方法中,我调用:
if (Hunger <= 0.0f)
{
userHealth -= HealthDepletionValue * Time.deltaTime;
}
Run Code Online (Sandbox Code Playgroud)
这应该消耗的设定值HealthDepletionValue每秒Time.deltaTime。
当我运行游戏时,它会每 0.1 秒或类似的时间消耗HealthDepletionValue。但肯定不是每 1 秒一次,就像我想要的那样。
我错过了什么?
正如指出这个帖子,更新()运行每帧一次。因此,如果您的游戏以 30 帧/秒的速度运行,那么 Update() 将执行 30 次/秒。
要指定每 x 秒执行一次函数,您可以使用InvokeRepeating。为此,请将您想要每秒执行的逻辑放入它自己的方法中:
void DepleteHealth()
{
if (Hunger <= 0.0f)
{
userHealth -= HealthDepletionValue * Time.deltaTime;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Start()方法中,调用InvokeRepeating,传入您的方法名称和执行所述方法之间的秒数:
void Start()
{
InvokeRepeating("DepleteHealth", 1.0f, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)
上面的帖子还显示了处理此问题的替代方法。在 Update() 方法中包括跟踪第二个计数器,以确保您的逻辑仅在计数器经过整整一秒后才执行。