2016年2月14日 星期日

Unity_C#_TimeScale_暫停/遊戲運行速度

*此教學使用Unity 5.3.2f1 (64-bit)免費版
*最後更新時間2016/05/30

Time.timeScale 是Unity中的方法,用來控制遊戲進行速度,
設定為1.0時為正常時間,0.0時為完全停止,
可以使用這個方法來設定遊戲運行的快慢或暫停的程式碼腳本。

本文將教學:
                     遊戲暫停
                     遊戲慢速
                     遊戲加速
----------------------------------------------------------------------------------------------------------

1.這裡簡單用三個Cylinder來講解。
  綠色使用程式碼,會依時間旋轉,
  紅色加了Rigidbody,會往下掉,
  藍色使用動畫系統,會依時間旋轉(動畫系統非本教學重點故省略作法)。

  提供綠色Cylinder的程式碼:
  void Update () { gameObject.transform.Rotate(new Vector3(0f, 0f, 2f)); }
   

2.新增四個UI Button,分別為正常速度、暫停、慢速、加速。


3.新增C#腳本開始撰寫程式碼如下,自訂函式,待會給按鈕使用。
   

4.把程式碼腳本掛在MainCamera上
   

5.選取四個按鈕,按下On Click()右下角的加號,
   會出現None欄位。
   

6.把MainCamera掛在None欄位。
   

7.現在個別選擇按鈕,點選No Function,
   可以選擇程式碼腳本與自訂函式。
   把對應的按鈕對上對應的函式。


8.執行結果。


   由上圖可見,加了Rigidbody的物件與動畫系統製作的物件會受到Time.timeScale影響
   而由程式碼所控制的物件不受Time.timeScale影響

   若想讓程式碼所控制的物件也受Time.timeScale影響,
   可以利用判別式來實現,例如:

        if (Time.timeScale == 1)
        { gameObject.transform.Rotate(new Vector3(0f, 0f, 2f)); }
        else if (Time.timeScale == 0)
        { gameObject.transform.Rotate(new Vector3(0f, 0f, 0f)); }
        else if (Time.timeScale == 0.2f)
        { gameObject.transform.Rotate(new Vector3(0f, 0f, 0.4f)); }
        else if (Time.timeScale == 3)
        { gameObject.transform.Rotate(new Vector3(0f, 0f, 6f)); }

本教學結束。