一个很神奇的功能:暂停游戏,且1秒后自动继续游戏。
用Time.timeScale=0来暂停游戏后,不管是用Timer-=Time.deltaTime还是用协程StartCoroutine来完成计时器都不行。因为上面两个方法都需要Time.timeScale。
现在来用不基于Time.timeScale的方法完成计时器。
方法一
Time.realtimeSinceStartup会返回从游戏开始后到现在的时间,想到了这个,我们的计时器就出来了。
先设置时间点为当前时间加上暂停的间隔时间:
needToUnPause = true UnPauseTimePoint = Time.realtimeSinceStartup + second; 12
然后Update中判断当前时间是否大于间隔点即可。
if (needToUnPause) { if (Time.realtimeSinceStartup > UnPauseTimePoint) { GameController.instance.UnPauseGame(); needToUnPause = false; } } 12345678
方法二
public void TimerHelper(System.Action action, float second) { ObjectLibrary.gameManager.StartCoroutine(Timer(action, second)); } /// <summary> /// 延时启动 /// </summary> /// <param name="action">函数</param> /// <param name="second">延时秒数</param> /// <param name="affectedByTimeScale">是否需要受函数影响</param> /// <returns></returns> public IEnumerator Timer(System.Action action, float second, bool affectedByTimeScale = true) { if (affectedByTimeScale) { yield return new WaitForSeconds(second); } else { yield return new WaitForSecondsRealtime(second); } action(); yield break; }
12345678910111213141516171819202122232425