在 Update 方法中每 X 秒消耗一次设定值

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 秒一次,就像我想要的那样。

我错过了什么?

dev*_*ull 5

正如指出这个帖子,更新()运行每帧一次。因此,如果您的游戏以 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() 方法中包括跟踪第二个计数器,以确保您的逻辑仅在计数器经过整整一秒后才执行。