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中是固定幀,每一幀的時間是相同的?
希望有人看到了能有人幫我解答這個問題...