關於Time.deltaTime的理解


在初學Unity3d時就不時會用上Time.deltaTime這個變量,初學Unity時不是很懂這個這個變量,那時的理解僅限於“要讓數值按每秒多少進行變化時把數值乘以它就對了”

 

這么理解它其實也不算錯

 

下面來簡單理解這個變量,我們先看看Unity官方手冊中對這個變量的描述(網址:https://docs.unity3d.com/ScriptReference/Time-deltaTime.html)

官方手冊中說明:這個變量是按秒為單位,完成上一幀所用的時間。(只讀。)

首先,這就意味着Time.deltaTime是一個變量,而不是一個常量,我想許多游戲玩家都會明白,一個游戲的FPS(游戲運行時每秒所運行的幀數)總是在變化的,FPS會因為電腦配置、場景變化或者游戲畫面質量的設置而改變,總之,在玩游戲的時候,FPS是在不斷變化的,可能配置高電腦FPS很穩定,但也會有變化時候

 

而Unity中,在每個新創建的C#腳本中都會有一個Update()方法,這個方法是每一幀都會運行一次的,如果我們在Update()方法簡單設置一個物體的位移“transform.translate(new vector3(1,0,0))”,那么就意味着這個物體每一幀向X軸正方向移動1個單位的距離,這樣一來,當游戲運行時,假設FPS穩定在60幀,那么就意味着這個物體每秒向X軸正方向移動60個單位,而當游戲環境發生變化,FPS降到30幀時,游戲物體就只能每秒向X軸正方向移動30個單位了

 

顯然,一般情況下,我們是不希望數值這樣變化的

 

因此,使用Time.deltaTime這個變量就顯得十分重要,這個變量是指完成上一幀所用的時間,那么假設當游戲的FPS穩定為50幀時,Time.deltaTime的值則為0.02秒,而當FPS降低或者上升時,即使改變的很劇烈,也會有個過渡時間,假設FPS從50幀在一秒的時間里降到了25幀,那么Time.deltaTime這個變量也會跟着變化的劇烈程度從0.02秒升到0.04秒

 

假設,一個游戲開始時FPS只有5幀(方便計算),游戲的某個腳本的Update()方法有一個物體位移函數transform.translate(new vector3(1*Time.deltaTime,0,0)),之后FPS逐漸降到了1幀,那么降低的過程中,Time.deltaTime的變化將是這樣的:

完成第一幀用了0.2秒,因此之后Time.deltaTime=0.2秒,

完成第二幀時,FPS已經降到了4幀,因此用了0.25秒,於是之后Time.deltaTime=0.25秒,

完成第三幀時,FPS已經降到了3幀,因此用了0.33秒,於是之后Time.deltaTime=0.33秒,

完成第四幀時,FPS已經降到了2幀,因此用了0.5秒,於是之后Time.deltaTime=0.5秒,

完成第五幀時,FPS已經降到了1幀,因此用了1.0秒,於是之后Time.deltaTime=1.0秒。

於是,完成第一幀時,物體向X軸正方向移動了1*0.2=0.2個單位,用時0.2秒,

完成第二幀時,物體向X軸正方向移動了1*0.2=0.2個單位,用時0.25秒,

完成第三幀時,物體向X軸正方向移動了1*0.25=0.25個單位,用時0.33秒,

完成第四幀時,物體向X軸正方向移動了1*0.33=0.33個單位,用時0.5秒,

完成第五幀時,物體向X軸正方向移動了1*0.5=0.5個單位,用時1.0秒.

上面的假設中,物體在2.28秒的時間里移動了1.48個單位,盡管與1單位/秒的速度有很大距離,但這里用的幀數是5幀降到1幀,當幀數為60幀甚至更高,改變幅度變小,物體的位移速度是可以約等於1單位/秒的。

以上假設只是為了方便理解,實際情況會更加復雜。

 

 

所以,當你在Update()方法中將transform.translate(new vector3(1,0,0))更改成transform.translate(new vector3(1*Time.deltaTime,0,0))后,這個物體的位移就基本能按每秒一個單位的速度向X軸正方向進行位移

 

當然,Unity中還有FixedUpdate()方法,不過這里只講到Update()方法;

 

以上為我對Time.deltaTime的簡單理解,如有不正確的地方,還望指教
--------------------- 
作者:Black_Window 
來源:CSDN 
原文:https://blog.csdn.net/Black_Window/article/details/80031114 


免責聲明!

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



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