1. 程式人生 > >在Unity3D中使用暫停的小技巧

在Unity3D中使用暫停的小技巧

很多人在遊戲中寫暫停指令碼的時候,經常會想到 Time.timeScale = 0; 這種方法,但是 Time.timeScale 只是能暫停部分東西。如果在 update 函式中持續改變一個物體的位置,這種位置改變貌似是不會受到暫停影響的。比如

 transform.position = transform.position+transform.TransformDirection(Vector3(0,0,throwForce));

Time.timeScale = 0 的時候這個東西仍然在動。

把使用Time.timeScale = 0; 功能的函式寫在 FixedUpdate() , 當使用 Time.timeScale = 0 時專案中所有 FixedUpdate() 將不被呼叫,以及所有與時間有關的函式。 在 update 通過一個布林值去控制暫停和恢復。Unity3D教程手冊

如果您設定 Time.timeScale 為 0,但你仍然需要做一些處理(也就是說動畫暫停選單的飛入),可以使用 Time.realtimeSinceStartup 不受 Time.timeScale 影響。

另外您也可以參考一下 Unity Answer 上提到的方法 要暫停遊戲時,為所有物件呼叫 OnPauseGame 函式:

Object[] objects = FindObjectsOfType (typeof(GameObject));
2
foreach (GameObject go in objects) {
3
go.SendMessage ("OnPauseGame", SendMessageOptions.DontRequireReceiver);
4
}

從暫停狀態恢復時:

A basic script with movement in the Update() could have something like this:protected bool paused;

 
01
void OnPauseGame ()
02
{
03
paused = true;
04
}
05

06
void OnResumeGame ()
07
{
08
paused = false;
09
}
10

11
void Update ()
12
{
13
if (!paused) {
14
// do movement
15
}
16
}