我无法在字符破折号上实现延迟

时间:2019-07-04 04:45:13

标签: c# unity3d

我正在尝试使我的角色不会永远持续破折号,但是会有一定的延迟,然后能够再次破折号。我的角色有时会决定有延迟,然后其他时候,当我单击该键时,它将连续无延迟地破折号。谁能帮我解决这个问题?谢谢。

编辑有人告诉我开始使用协程,但是我不确定它是如何工作的,我编辑了代码以使用“ yield”,但是我也不清楚它是如何工作的。有人可以告诉我这对我想要的是正确的,以及如何解决的吗?谢谢

if (hasTeleportedRecently == false)
        {
            transform.position = transform.position + transportVector;
            hasTeleportedRecently = true;
            yield return 3;
            hasTeleportedRecently = false;
        }

2 个答案:

答案 0 :(得分:0)

您可以不使用协程。设置类型为float的字段,在其中存储再次传送时的时间,并在播放器尝试传送时将当前时间与当前时间进行比较:

float now = Time.time;
if (now >= teleportAvailableAt) {
    transform.position += transportVector;
    teleportAvailableAt = now + 3f;
}

提示:

请勿将布尔值与truefalse进行比较。完全省略== true并将== false替换为!运算符。它更短且更不容易出现错误(您可以不小心写出if (flag = false) ...-您在这里 assign false,并且仍然可以编译)

答案 1 :(得分:-1)

https://github.com/tim12332000/TimUnityUtility/blob/master/Assets/ScheduleHelper/ScheduleHelper.cs

使用它,例如,使任务延迟3秒。

hasTeleportedRecently = true;
ScheduleHelper.Instance.DelayDo(()=> {hasTeleportedRecently = false;},3f);