Unity Update 詳解
在unity中常用到函數(shù)
物理運算應該放在FixedUpdate中
Input檢測應該放在Update中
相機應該放在LateUpate中
首先來看一下官方的解釋:
Update
Update is called every frame, if the MonoBehaviour is enabled.
Update is the most commonly used function to implement any kind of game script. Not every MonoBehaviour script needs Update.
上面重點說的是Update每幀都會被調(diào)用。
FixedUpdate
Frame-rate independent MonoBehaviour.FixedUpdate message for physics calculations.
????????首先FixedUpdate和幀率是不相關(guān)的。
????????而且在官方的解釋中,F(xiàn)ixedUpdate的更新頻率不是按幀率,而是按一個叫做 fixed frame-rate frame,這里我們稱其為物理幀。而其更新的默認頻率是每秒50次,這個值可以通過項目設(shè)置來更改。
(官方給到建議:如果有用到Rigidbody,并且有施持續(xù)力的情況,就放在FixedUpdate里面。)
LateUpdate
LateUpdate is called every frame, if the Behaviour is enabled.
這里和Update函數(shù)的描述一致,都是每幀調(diào)用一次。
(官方給到建議:Camera最好放在這里,因為LateUpdate是在所有Update函數(shù)運行完以后才開始執(zhí)行的。是所有updata)
在使用FixedUpdata時候,遇到過一個問題:FixedUpdate 函數(shù)中使用Input有可能調(diào)用不到。
當時為了解決這個問題在設(shè)置中更改了時間間隔(固定時間間隔更新,一般為0.02s更新一次,可以放與物理屬性操作相關(guān)代碼。也可以由用戶更改時間間隔,Edit->Project Settings->Time 找到彈出面板的Fixed Timestep設(shè)置。)

但是更改FixedUpdata后會出現(xiàn)兩種情況:
1.幀率較低,也就是Time.deltaTime比較大,那么此時執(zhí)行一次Update函數(shù)就要執(zhí)行很多次FixedUpdate函數(shù)。那么按下一次x就會執(zhí)行很多次DoSth().
這里為什么是很多次,這是因為Input事件是獲取事件而非檢測事件,因為只有執(zhí)行到SetInput,新的按鍵狀態(tài)才會被更新。
2.幀率很高,也就是Time.deltaTime比較小。那么此時執(zhí)行一次Update函數(shù)可能并未執(zhí)行FixedUpdate函數(shù)。那么按鍵就不會被檢測到。
我就是遇到了第二種情況,所以在使用input獲取點擊事件時,要使用updata。
感謝原作者詳細解釋:
原文鏈接:https://blog.csdn.net/lexnewgate/article/details/85015376