无限循环: while(Time.time < Time.time + 5f)

tom*_*ofv 2 c# unity-game-engine

我快要疯了。我一生都无法弄清楚为什么下面的代码会导致 Unity 在我按下播放键后立即冻结。这是一个空项目,脚本附加到一个空游戏对象。在控制台中,什么也没有出现,甚至没有出现初始的Debug.Log("Step 1");

using UnityEngine;

public class Reels : MonoBehaviour
{    void Start()
    {
        Debug.Log("Step 1");
        TestFunction(1f);
    }

    private void TestFunction(float duration)
    {
        float endTimer = Time.time + duration;
        Debug.Log("Step 2 " +  endTimer);

        while (Time.time < endTimer)
        {
            Debug.Log("Step 3");
        }
    }

    void Update()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

请保佑我的理智。

Bli*_*ndy 6

Time.time是一个只读字段,存储帧开始时的时间,以及您编写代码的方式,帧永远不会结束,因为您永远不会跳出该循环。

  • 请改用 [Time.realtimeSinceStartup](https://docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html)。 (2认同)