Unity面試問答系列(1)﹣Update的區別

  • 10 八月 2018 |
  • Written by 

今天在台北面試Unity開發時被問到了這個經典問題:Update和LateUpdate的區別,我信心滿滿的用官方頁面的例子來回答,卻意外遭到面試官的差評,於是現在來檢討這個基本款問題究竟要怎麼答。

首先来看官方教程頁面: Update adn FixedUpdate

 

fixedupdateupdate

從上面兩幅圖中可以看出,FixedUpdate在Update之前執行,用來處理物理計算,Update則負責邏輯部分的計算,那剩下的LateUpdate就只能

回到官方文档找答案了:ExecutionOrder页面

updateOrder

這差不多是你能搜到的絕大多數討論區里的高票答案:兩者共同點是每一幀都執行,區別是Update在前,LateUpdate緊隨其後,通常將角色移動代碼放在Update中,然後在LateUpdate中調用攝影機跟隨代碼,以確保攝影機所捕獲的畫面中角色的位置是已經完成位移計算后的位置(防抖)。──很不幸,面試官期待的並不是這個答案。

在面試官給出他的答案之後我才意識到他關注的其實是ExecutionOrder页面最下方的“Execution Order of Event Functions”圖,因為他給出的答案是:“Update負責輸入檢測和程式邏輯,LateUpdate則是負責動畫的,所以我們控制動畫的代碼都要放到這裡執行。”

monobehaviour flowchart

上圖配合Unity官方文檔閱讀上有些混亂,所以推薦各位我個人最喜歡的排版:一起看看MonoBehavior內部時間執行順序 - 來自Rocky Lai的技術博客,但關於LateUpdate控制動畫這一提法還是沒有直接證據(動畫計算結束后才是LateUpdate,已有了結果的動畫是要如何控制啊?),所以還要翻看另外兩個討論區里的答案進行補充:

1、直接提及“You can implement procedural animation in LateUpdate which modifies the pose sampled by the animation system”的答案

LateUpdateControlAnim

2、然後就有了衍生問題“既然在Update中檢測輸入,那如何在LateUpdate中進行動畫控制”的討論

controlAniminLateupdate

比較不直觀對吧,先拋開理論,來看下Youtuber Kosman製作的對比視頻

而這個視頻恰好也解答了面試官的第二個問題:

如果要動畫師配合你製作骨架動畫,你會如何處理上半身動作和下半身動作共用的問題,以及如何用代碼實現頭部轉動的控制?

詳細解法改天再答。

如果你有更棒的解釋方法或解法也歡迎經驗分享~

Last modified on 週五, 10 八月 2018 13:04
Rate this item
(0 votes)
Login to post comments
back to top