Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 健康损害之间的统一延迟_C#_Unity3d - Fatal编程技术网

C# 健康损害之间的统一延迟

C# 健康损害之间的统一延迟,c#,unity3d,C#,Unity3d,这是我将在游戏中使用的健康系统的基本脚本。到目前为止,生命值的减少和增加是通过按键触发的,但后来是通过碰撞器触发的。我想知道如何重写脚本,以便当玩家失去生命时,在失去更多生命之前必须发生一个时间延迟。这是为了防止快速消耗玩家的健康 健康脚本: 使用System.Collections.Generic; 使用UnityEngine; 使用UnityEngine.UI; 公共卫生:单一行为{ 公共卫生; 公众心; 公众形象,; 公众精神饱满; 公共精灵空心; 无效更新(){ 如果(健康>数字){ 健

这是我将在游戏中使用的健康系统的基本脚本。到目前为止,生命值的减少和增加是通过按键触发的,但后来是通过碰撞器触发的。我想知道如何重写脚本,以便当玩家失去生命时,在失去更多生命之前必须发生一个时间延迟。这是为了防止快速消耗玩家的健康

健康脚本:

使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共卫生:单一行为{
公共卫生;
公众心;
公众形象,;
公众精神饱满;
公共精灵空心;
无效更新(){
如果(健康>数字){
健康=心脏;
}
for(int i=0;i
下面的解决方案显示了如何执行此操作,但由于它在更新中计数,因此取决于帧速率

下面是一个使用时间戳而不是计算“滴答声”的答案

如果您不理解这个链接,请查看我的代码,它的“工作原理”应该更清楚


我这里的代码不会受到损害,除非经过一定的时间。。。Andrey的解决方案将缓慢地将显示更新为实际值

添加到主对象

static cooloff = 0;
还将添加到主更新:

if (cooloff > 0) cooloff--;
然后像这样接受伤害

void TakeDamage(int damage)
{
    const cooloffwait = 100; -- change this value to number of ticks needed

    if (cooloff == 0)
    {
       health -= damage;
       cooloff = colloffwait;
    }
}

@derHugo你的链接与他的问题无关——这些答案是关于等待将来做某事的——这个问题是关于暂时不做某事的。为什么要用一个不好的链接来结束这个问题?@Hogan,因为它基本上正是统一中这类问题的解决方案:延迟重新允许执行某项任务。这基本上就是你在回答中所做的。但请注意,您的答案非常糟糕,不应按原样使用,因为它完全依赖于帧速率。。如果你查看链接,你会看到人们用这样一个计时器回答,但使用的是与帧速率无关的浮动时间。这肯定是回答了很多次的问题。。第一个链接只是我找到的第一个链接,它为用户提供了最多的选择delays@derHugo我的当然坏了。但是你发布的链接做了一些不同的事情。@Hogan:这只是第一个链接,它提供了最多的选项来延迟Unity中的代码执行。从那里开始,把它放入一个无休止的循环是OP的家庭作业。如果第一个链接与您的意见不匹配,请查看其他三个链接。它仍然是一个副本;)Wymlock——以下是解决实际问题的答案。这取决于帧速率,不应像这样起诉。如果某个东西更倾向于使用基于
Time.deltaTime
浮点
计时器,则为自上一帧以来经过的时间…请注意,
DateTime
也不是一个很好的解决方案<代码>日期时间。现在非常昂贵而且不必要。将
float
时间戳与
Time进行比较。时间
将更有效。但正如所说的,最好的方法可能是