在初始互动后开始游戏计时器

本文关键字:开始 游戏 计时器 | 更新日期: 2023-09-27 18:06:56

我已经创建了一个空闲警告,通知用户由于不活跃游戏将很快重新启动,但我仍然有一个问题-一旦游戏重新启动计时器触发,而不是在用户第一次开始交互(第一次触摸屏幕)后触发。我的代码中遗漏了什么?

private Vector3 prevMousePosition = Vector3.zero;
public GameObject timeOutWarning;
void Start()
{       
    prevMousePosition = Input.mousePosition;
}
void Update()
{
    if(Input.anyKeyDown || Input.mousePosition != prevMousePosition)
    {
        StartGameTimer();
        timeOutWarning.SetActive(false);
    }
    prevMousePosition = Input.mousePosition;
}
void StartGameTimer()
{
    CancelInvoke ();
    Invoke ("ShowRestartWarning", 10);
}
void ShowRestartWarning()
{
    timeOutWarning.SetActive(true);
    Debug.Log ("Restart Warning Popup");
    CancelInvoke ();
    Invoke ("RestartGame", 10);
}
void RestartGame()
{
    Debug.Log("Restarting Game Now");
    Application.LoadLevel(Application.loadedLevel);
}

在初始互动后开始游戏计时器

问题很可能出在您的第一行代码:

if(Input.anyKeyDown || Input.mousePosition != prevMousePosition)

第一次点击这一行,prevMousePosition将是0,0(除非您在其他地方初始化它)。你的鼠标位置不太可能是这样的,所以你会直接触发计时器。

最明显的解决方案是在Update第一次被调用之前设置一个有用的值:

void Start()
{
    previousMousePosition = Input.mousePosition;
}