我已经创建了一个空闲警告,通知用户游戏将因为不活动而很快重启,但我仍然遇到一个问题 - 一旦游戏重新开始计时器触发而不是仅在第一次用户之后触发开始互动(首先触摸屏幕)。我的代码中缺少什么?
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);
}
答案 0 :(得分:2)
问题似乎最有可能是您的第一行代码:
if(Input.anyKeyDown || Input.mousePosition != prevMousePosition)
第一次点击此行时,prevMousePosition
将为0,0
(除非您在其他位置初始化它)。您的鼠标位置不太可能,因此您可以立即触发计时器。
最明显的解决方案是在首次调用Update
之前设置一个有用的值:
void Start()
{
previousMousePosition = Input.mousePosition;
}