來源:https://blog.csdn.net/ChinarCSDN/article/details/82914420
1
deltaTime —— 增量時間
deltaTime 官方的解釋我就不說了
官方的解釋多數新手都是看不懂的,不然也不會四處搜博文來學習了
?想要理解增量時間,我們拿物體的移動這種經典案例來說明
要讓一個物體,每秒移動10米,代碼如下
/// <summary>
/// 每幀刷新
/// </summary>
void Update()
{
transform.Translate(0, 0, Time.deltaTime * 10); //物體沿着自身Z軸方向,每秒移動物體10米運動
}
1
2
3
4
5
6
7
2
Why? —— 為什么乘以增量時間
那么問題來了,多數新手都懵逼在這里: 為什么要乘以增量時間?
我們假設游戲運行時,1秒是60幀。—— 那就是說60個畫面,刷!刷!刷!執行完,耗時1秒。
如果電腦,或者手機幀數沒有到60幀,時而30幀,時而50幀
那么就會出現,有時候1秒移動了500米 有時候300米,總之每秒都不一樣
所以牛逼的前輩們就想到了解決辦法,從而引入了增量時間的概念
增量時間是實時變動的,而且每一幀都在變動
1秒30幀,那增量時間就是 1/30 秒
1秒60幀,那增量時間就是 1/60 秒
1秒166幀,那增量時間就是 1/166 秒
這樣的設計理念,就保證了無論幀率是多是少,我們讓物體1秒移動10米,最后1秒移動的就一定是10米
公式:路程=速度*時間
10米=1秒 * 10米/秒
10米=(1/60 * 60) *10米/秒
10米=(1/166 * 166) *10米/秒
10米=(增量時間 * 1秒總幀數) *10米/秒
重點:
Update函數是每幀執行一次,那么經歷過一幀耗費的時間就是 增量時間/deltaTime
1秒內Update執行的次數,就是1秒內執行的總幀數
所以我們只需要寫上 transform.Translate(0, 0, Time.deltaTime * 10)這一個函數
Update執行了1次,transform.Translate(0, 0, 1/60 * 10)執行一次,物體移動了1/6米
Update1秒內執行了60次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以60次
相當於 =(每幀時間1/60 * 速度 * 60)=10米
Update1秒內執行了N次,就是transform.Translate(0, 0, Time.deltaTime * 10)乘以N次
相當於 =(每幀時間1/N * 速度 * N)=10米
3
Wrong —— 誤區
而大家都知道 Update 函數的調用,是很快的。在我們假定的情況下,這1秒就會被調用60次
而此時我們的代碼transform.Translate(0, 0, 10)被執行60次
每執行一次,物體就會移動10米。60*10=600米,這完全違背了我們讓物體每秒移動10米的初衷
公式:路程=速度*時間
Update執行了1次,transform.Translate(0, 0, 10)執行一次,物體就已經移動了10米
Update1秒內執行了60次,就是transform.Translate(0, 0,10)乘以60次
相當於 =(10 * 60)=600米
Update1秒內執行了N次,就是transform.Translate(0, 0, 10)乘以N次
相當於 =(10 * N)=10N米
————————————————
版權聲明:本文為CSDN博主「Chinarcsdn」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ChinarCSDN/article/details/82914420