以下是從極客學院視頻教程里的截圖,詳細的說明了Time下各個變量的表示和含義
圖中紅色為只讀值,綠色為可讀可寫
-
Time.time 表示從游戲開發到現在的時間,會隨着游戲的暫停而停止計算。
-
Time.timeSinceLevelLoad 表示從當前Scene開始到目前為止的時間,也會隨着暫停操作而停止。
-
Time.deltaTime 表示從上一幀到當前幀時間,以秒為單位。又稱增量時間
-
Time.fixedTime 表示以秒計游戲開始的時間,固定時間以定期間隔更新(相當於fixedDeltaTime)直到達到time屬性。
-
Time.fixedDeltaTime 表示以秒計間隔,在物理和其他固定幀率進行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行設置。
-
Time.SmoothDeltaTime 表示一個平穩的deltaTime,根據前
N幀的時間加權平均的值。 -
Time.timeScale 時間縮放,默認值為1,若設置<1,表示時間減慢,若設置>1,表示時間加快,可以用來加速和減速游戲,非常有用。
-
Time.frameCount 總幀數
-
Time.realtimeSinceStartup 表示自游戲開始后的總時間,即使暫停也會不斷的增加。
-
Time.captureFramerate 表示設置每秒的幀率,然后不考慮真實時間。
-
Time.unscaledDeltaTime 不考慮timescale時候與deltaTime相同,若timescale被設置,則無效。
-
Time.unscaledTime 不考慮timescale時候與time相同,若timescale被設置,則無效。

在unity3d中獲取系統時間的代碼: var gSkin:GUISkin; var str=""; var Months:String[]=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]; var Days:String[]= ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20", "21","22","23","24","25","26","27","28","29","30","31"]; var dNow:System.DateTime; var i=0; function OnGUI() { if(gSkin)GUI.skin=gSkin; GUILayout.Box("本地日期時間:"+System.DateTime.Now);//本地時間,12小時制的 GUILayout.Box("軍事日期時間:"+System.DateTime.Now.ToString("yyyyMMddHHmmss")); GUILayout.Box("UTC日期時間:"+System.DateTime.UtcNow);//UTC時間 GUILayout.SelectionGrid(System.DateTime.Now.Month-1,Months,3); GUILayout.SelectionGrid(System.DateTime.Now.Day-1,Days,10); GUILayout.Box(str+dNow.Now.Year+"年"+dNow.Now.Month+"月"+dNow.Now.Day+" 日"+" "+dNow.Now.Hour+"時"+dNow.Now.Minute+"分"+dNow.Now.Second+"秒"); }
1、 UnityEngine.Time.captureFramerate:
一旦設置了這個值(非0),每一幀會以1.0f/captureFramerate的時間更新(相對於Time.time,每一幀執行的真實時間還是不變的,其實這里再乘以Time.timeScale更合適),說白了就是改變每一幀所用的時間。這個屬性並不改變Time.timeScale和Application.targetFrameRate
2、UnityEngine.Time.deltaTime:
時間增量,依據Time.time,在Update里調用返回的是完成上一幀的時間,在FixedUpdate里調用返回的是FixedTimeStep的值。
3、UnityEngine.Time.fixedDeltaTime :
固定增量時間,返回FixedTimeStep。FixedUpdate執行的時間間隔和物理檢測的時間間隔。
注意一下,這個是依據的是Time.time,也就是當Time.time累加的值等於了FixedTimeStep,那么FixedUpdate和物理檢測就會執行,可以理解成當時間被加速,和此時間有關的會被更頻繁的執行,所以當Time.timeScale為0時,FixedUpdate不會被執行。
4、UnityEngine.Time.fixedTime :
固定時間,上一次FixedUpdate開始執行的時間,從程序開始計時。
5、UnityEngine.Time.frameCount :
幀計數器,返回游戲一共經過了多少幀。
6、UnityEngine.Time.maximumDeltaTime :
一幀所需的最大時間,如果一幀所需的時間可能大於這個值,那么一些物理檢測和其他一些固定幀的更新將會減少執行。
7、UnityEngine.Time.realtimeSinceStartup :
從程序啟動到現在的時間,依據系統時間,不受Time.timeScale影響,當程序處於后台時,這個時間依然有效,不會停止計時,不管程序可不可以在后台運行。
8、UnityEngine.Time.renderedFrameCount :
這個沒有找到任何官方文檔,比較奇怪。從字面上理解,就是被渲染幀的次數。嘗試在Update(還有FixedUpdate和LateUpdate,這兩個和Update的值是一樣的)里輸出一下,會發現這個次數每次都是增加2,而不是增加1,這就很奇怪吧,Update是每一幀都要執行的,這個是肯定的,也就是再每一幀其實是渲染了兩次的。想了一下,在一幀中,還有可能被執行的還有OnGUI,結果在里面輸出一下發現,多增加的1果然是在這里面。這個應該用的比較少。
9、UnityEngine.Time.smoothDeltaTime :
一個平滑淡出Time.deltaTime的時間。在Update里和Time.deltaTime輸出比較一下就會發下,這個值是當前的Time.deltaTime和上一幀的Time.smoothDeltaTime的一個差值的中間值。
10、UnityEngine.Time.time :
程序內部的一個時間,返回當前幀開始的時間,受Time.timaScale影響。在FixedUpdate里調用,將返回Time.fixedTime。當程序處於后台時,如果程序不可以在后台運行,這個時間將失效,不會再計時了。
11、UnityEngine.Time.timeScale :
時間縮放,影響一切基於Time.time的行為。
12、UnityEngine.Time.timeSinceLevelLoad :
從場景加載完到現在的時間,基於Time.time。
13、UnityEngine.Time.unscaledDeltaTime :
忽略Time.timeScale的Time.deltaTime。在剛開始的兩幀貌似不太准
14、UnityEngine.Time.unscaledTime :
把每一幀的Time.unscaledDeltaTime 加起來就是這個屬性的值,雖然說理解功能上Time.realtimeSinceStartup 有點相似,當時兩者並不想等,就是因為Time.unscaledDeltaTime在程序開始不太准確的原因,導致和 realtimeSinceStartup 會有誤差,這個要注意一下。
總結:
兩種時間一定要分清,一個是依賴於系統的時間,它的一秒等於現實世界的一秒;另一個是程序自己的時間,這個時間可人為控制(加速,減速),大部分屬性都是基於這個時間的。