關於Unity3D中deltaTime的簡單分析到引發思考

deltatime 是Time類下一個重要的靜態變量,他表示的是上一幀所用的時間,在腳本中我們會經常用到它,假設我們此處有一個腳本文件


//此處新建一個含有Transfrom組件的對象

public Transform tmpObj;         


void Update () {
        tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime);
 }


假設我們在場景中新建了一個Cube物體,並綁定到此腳本的tmpObj對象上

那麼  tmpObj.transform.Translate(Vector3.back*5*Time.deltaTime);  表示的就是向後移動該Cube物體


Vector3.back的值是0.0,  0.0,  -1.0...即表示Z軸方向指向屏幕外

        5*deltaTime表示的是什麼呢?

他表示的是每秒的變化量爲5...此處也就是沿Z軸方向每秒後退5個單位...

爲什麼說它是每秒的變化,那麼此處要結合Update()方法一起看


假設我們現在有兩臺機器稍微好點,一臺普通的

前者每秒渲染25幀,即幀頻是 25幀/s,那麼其deltaTime理論近似爲1/25s,爲什麼說近似,因爲有的幀快有的幀慢

                          後者幀頻是 20幀/s,那麼其deltaTime理論近似爲1/20s

那麼1秒的時間

        稍好點的機器移動的距離  25 * 1/25 * 5 = 5

        稍普通的機器移動的距離  20 * 1/25 * 5 = 5

發現雖然機器的不同但最後的結果都是移動了相同的距離,避免了不同機器下的到不同的效果

當然這裏我們的結論並不嚴謹,因爲我爲了大家好理解將deltaTime取了近似值1/25

那麼假設

前者第一幀和第二幀渲染的都很快都是1/50s,中間22幀都是1/25s,最後一幀較慢用了2/25s

後者第一幀和第二幀渲染的都很快都是1/40s,中間17幀都是1/20s,最後一幀較慢用了2/20s

乍一看感覺最後逐個乘加的到的結果還有相同的5


但是再看了看deltaTime的定義突然發現問題來了,若幀是如此的話,那麼第一幀的deltaTime到底是多少?

                                                                還有最後一幀到底到底有沒有執行,理論上肯定會執行,但若執行豈不是多出一幀?

                                                                還是說從第2幀開始執行並把第二幀當第1幀?

                                                                亦或是Unity中是固定幀,每一幀的時間是相同的?

希望有人看到了能有人幫我解答這個問題...




發佈了21 篇原創文章 · 獲贊 2 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章