Unity 的時間邏輯流程圖

flowchart TD
    A["`deltaTime`"] --> B{"`deltaTime 
                             是否比
                             maximumDeltaTime 大?`"}
    B -- 是 --> C[deltaTime 的值設為
maximumDeltaTime] C --> D B -- 否 --> D[ deltaTime
被加到 time 中 ] D --> E{"`fixedTime 是否落後 Time.time 一個固定時間步長?`"} E -- 是 --> F[ fixedDeltaTime
加到 fixedTime中 ] F --> G[ 執行 FixedUpdate ] G --> E E -- 否 --> H[ 執行 Update ]

Time.time :為遊戲開始後經過的時間,以秒為單位,一般會持續穩定的增加,只可讀。

  • timeScale 影響,如果 Time.timeScale 設為 0 ,那麼 Time.time 會停止計時,可以達到遊戲暫停的功能。
  • maximumDeltaTime 限制。
  • 當在 FixedUpdate 中呼叫時,回傳的是 Time.fixedTime 的值。
  • 通常用於關於整場遊戲計時的計算。

Time.deltaTime :從上一個幀到目前幀之間的時間間隔,以秒為單位。

  • 可以在遊戲中用來製作倒數裝置,例如施放技能的時間變化。

Time.timeScale :時間流逝的縮放程度,可以用在實現慢動作效果,預設為 1.0 。

  • 當為 1.0 時,表示遊戲時間和真實時間同步,
  • 如果設為 0.5 則遊戲時間以半速運行。
  • 設為 0.1 可以實現慢動作效果,這表示播放速度為正常速度的 10%。經過十秒之後 Time.time 的值會增加 1。
  • 當為 0 時,則時間停止,但是遊戲邏輯(像是 Update 方法仍然會被呼叫)與渲染事件仍然會被觸發。但 Time.time 不會增加,Time.deltaTime 也為 0。

Time.maximumDeltaTime :上面的屬性會被 Time.maximumDeltaTime 限制,這表示這些屬性任何幀率變化的長度永遠不會超過 Time.maximumDeltaTime,例如,如果發生一秒的延遲,且 maximumDeltaTime 為 0.333,那麼 Time.time 只會增加 0.333,而 Time.deltaTime 也會等於 0.333,儘管實際上已經過了更多時間。

  • unscale版本的屬性(如Time.unscaledTimeTime.unscaledDeltaTime)會忽略這些變化和限制,並回報實際經過的時間。對於需要在遊戲慢動作播放時仍以固定速度響應的任何事物都很有用。例如,用於 UI 交互動畫。

返回 時間與幀 大綱

Reference:

評論