C# 在更新方法中每X秒消耗一次设定值
我想在更新方法中每隔1秒从设置值中消耗一次生命值。我写的代码,但它似乎消耗速度超过1秒 在更新方法中,我调用:C# 在更新方法中每X秒消耗一次设定值,c#,unity3d,C#,Unity3d,我想在更新方法中每隔1秒从设置值中消耗一次生命值。我写的代码,但它似乎消耗速度超过1秒 在更新方法中,我调用: if (Hunger <= 0.0f) { userHealth -= HealthDepletionValue * Time.deltaTime; } if(Hunger如中所述,Update()每帧运行一次。因此,如果您的游戏每秒运行30帧,则Update()将每秒执行30次 要指定每x秒执行一次的函数,可以使用。为此,请将每秒要执行的逻辑放入它自己的方法中: vo
if (Hunger <= 0.0f)
{
userHealth -= HealthDepletionValue * Time.deltaTime;
}
if(Hunger如中所述,Update()每帧运行一次。因此,如果您的游戏每秒运行30帧,则Update()将每秒执行30次
要指定每x秒执行一次的函数,可以使用。为此,请将每秒要执行的逻辑放入它自己的方法中:
void DepleteHealth()
{
if (Hunger <= 0.0f)
{
userHealth -= HealthDepletionValue * Time.deltaTime;
}
}
上面的文章还展示了处理此问题的其他方法。包括在Update()方法中跟踪第二个计数器,以确保只有在计数器已过一整秒时才执行您的逻辑。调用重复的另一个选项是创建您自己的计时器
float timer = 0;
Update()
{
if (Hunger <= 0.0f)
{
timer += time.deltaTime;
if (timer > 1f){
userHealth -= HealthDepletionValue;
timer = 0; //reset timer
}
}
}
float定时器=0;
更新()
{
如果(1f){
userHealth-=HealthDrupationValue;
计时器=0;//重置计时器
}
}
}
或者,您可以使用a和类
这可能非常简单。如果您能提供一个。例如,显示userHealth
的值和类型以及其他变量,那就太棒了。@mjwills让我们假设userHealth
值为1。但是我正在调试这个问题,似乎Time.deltaTime返回的值介于0.1和0.3之间。这种情况使ense为什么它现在对我不起作用。如果bool设置为true,我怎么能每1秒耗尽一次呢?使用InvokeRepeating。@Arthuberkin查看更新的答案,并举例说明这将如何使用donethanks mate,这是有效的。出于某种原因,如果我在Start方法末尾调用了InvokeRepeat,它就不起作用了。你会知道为什么吗?因为这对我来说毫无意义。
float timer = 0;
Update()
{
if (Hunger <= 0.0f)
{
timer += time.deltaTime;
if (timer > 1f){
userHealth -= HealthDepletionValue;
timer = 0; //reset timer
}
}
}
public void Start () {
StartCoroutine(DepleteHealth(TimeSpan.FromSeconds(1), 5));
}
public IEnumerator DepleteHealth (TimeSpan frequency, int loss) {
var wait = new WaitForSeconds((float)frequency.TotalSeconds());
while(true) {
userHealth -= loss;
yield return wait;
}
}