Unity Time類詳解


以下是從極客學院視頻教程里的截圖,詳細的說明了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[]= ["","","","","","","","","","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+"");

       

}
在unity3d中獲取系統時間的代碼:

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 會有誤差,這個要注意一下。

總結: 
兩種時間一定要分清,一個是依賴於系統的時間,它的一秒等於現實世界的一秒;另一個是程序自己的時間,這個時間可人為控制(加速,減速),大部分屬性都是基於這個時間的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM