關於unity中的update、Lateupdate和FixedUpdate
MonoBehaviour.Update 更新
當MonoBehaviour啟用時,其Update在每一幀被呼叫。
MonoBehaviour.FixedUpdate 固定更新
當MonoBehaviour啟用時,其 FixedUpdate 在每一幀被呼叫。
處理Rigidbody時,需要用FixedUpdate代替Update。例如:給剛體加一個作用力時,你必須應用作用力在FixedUpdate裡的固定幀,而不是Update中的幀。(兩者幀長不同)
MonoBehaviour.LateUpdate 晚於更新
當Behaviour啟用時,其LateUpdate在每一幀被呼叫。
LateUpdate是在所有Update函式呼叫後被呼叫。這可用於調整指令碼執行順序。例如:當物體在Update裡移動時,跟隨物體的相機可以在LateUpdate裡實現。
Update和FixedUpdate的區別:
update跟當前平臺的幀數有關,而FixedUpdate是真實時間,所以處理物理邏輯的時候要把程式碼放在FixedUpdate而不是Update.
Update是在每次渲染新的一幀的時候才會呼叫,也就是說,這個函式的更新頻率和裝置的效能有關以及被渲染的物體(可以認為是三角形的數量)。在效能好的機器上可能fps 30,差的可能小些。這會導致同一個遊戲在不同的機器上效果不一致,有的快有的慢。因為Update的執行間隔不一樣了。
而FixedUpdate,是在固定的時間間隔執行,不受遊戲幀率的影響。有點想Tick。所以處理Rigidbody的時候最好用FixedUpdate。
PS:FixedUpdate的時間間隔可以在專案設定中更改,Edit->Project Setting->time 找到Fixed timestep。就可以修改了。
Update和LateUpdate的區別
在聖典裡LateUpdate被解釋成一句話:LateUpdate是在所有Update函式呼叫後被呼叫。這可用於調整指令碼執行順序。例如:當物體在Update裡移動時,跟隨物體的相機可以在LateUpdate裡實現。這句我看了雲裡霧裡的,後來看了別人的解釋才明白過來。
LateUpdate是晚於所有Update執行的。例如:遊戲中有2個腳步,腳步1含有Update和LateUpdate,腳步2含有Update,那麼當遊戲執行時,每一幀都是把2個腳步中的Update執行完後才執行LateUpdate 。雖然是在同一幀中執行的,但是Update會先執行,LateUpdate會晚執行。
現在假設有2個不同的指令碼同時在Update中控制一個物體,那麼當其中一個指令碼改變物體方位、旋轉或者其他引數時,另一個腳步也在改變這些東西,那麼這個物體的方位、旋轉就會出現一定的反覆。如果還有個物體在Update中跟隨這個物體移動、旋轉的話,那跟隨的物體就會出現抖動。 如果是在LateUpdate中跟隨的話就會只跟隨所有Update執行完後的最後位置、旋轉,這樣就防止了抖動。
做一個相機跟隨主角的功能時,相機的位置調整寫在LateUpdate(),老是不明白,看官方的SmoothFollow相機跟隨寫在Update()中
相關文章
- lua的update、lateupdate
- Oracle中的for update 和 for update nowaitOracleAI
- MySQL 關於 INSERT INTO...ON DUPLICATE KEY UPDATE 的使用MySql
- Developing for ARKit 1.5 update using Unity ARKit PlugindevUnityPlugin
- 關於SVN update之後,引起衝突的解決方法
- 關於java中的i++和++iJava
- 關於leetcode中的高度和深度的概念LeetCode
- 關於Unity 如何與Blazor Server結合UnityBlazorServer
- 關於Warning: setState(...): Can only update a mounted or mounting component. This
- 關於unity專案匯出iOS工程的問題UnityiOS
- Python中關於++和—(自增和自減)的理解Python
- 關於setInterval和setTImeout中的this指向問題
- 關於Vue中插槽的理解和總結Vue
- 關於Java中的類和物件筆記Java物件筆記
- unity中animator中Trigger多次觸發動畫的解決方法(基於 stateInfo和ResetTrigger)Unity動畫
- MybatisPlus中的update操作MyBatis
- Oracle中 Update和insert結合語法Oracle
- 解決ROS國內rosdep init和update的相關問題ROS
- 【Unity】相關Unity
- Unity3D 關於飛行型別集合Unity3D型別
- Sqlserver update\delete用inner join關聯,會update\delete關鍵字後面的表關聯到的行SQLServerdelete
- 屬於 Unity 的 Flutter——UIWidgetsUnityFlutterUI
- 關於MyEclipse中build path和compiler的jre不匹配EclipseUICompile
- 關於 Angular HTTP Interceptor 中 Request 和 Response 的 immutable 特性AngularHTTP
- update-initramfs的用途和功能
- apt的update和upgrade區別APT
- Unity——Js和Unity互相呼叫UnityJS
- Django 中的資料庫update() 和 save() 方法的機制的不同Django資料庫
- 關於Unity2018的實體元件系統(通用名稱ECS)Unity元件
- 關於 Unity 遊戲的效能引數的標準是怎麼制定的?Unity遊戲
- 關於 Angular 中的 AuthGuardAngular
- 關於 iOS 中的庫iOS
- 關於oracle中的undoOracle
- 關於Spring中的useSuffixPatternMatchSpring
- win10 windows update怎麼關閉_win10 windows update關閉方法Win10Windows
- 【redis】關於查詢和分析redis中的bigkeys問題Redis
- unity陰影(一)烘焙和Quality中Shadows的設定Unity
- 關於rpc的整理和理解RPC
- 關於Oracle的BLOB和CLOBOracle