2013年6月27日 星期四

[Unity] 使用 Mecanim 需要注意的事情

此處紀錄我在使用Mecanim過程中所發現需要注意的一些地方,有些可能不正確或解說錯誤,僅供參考!

  • 骨架檔的root的x,y需要對正至原點
骨架檔的root的x,y需要對正至原點,否則動作blending時會有位移的誤差。
  • (Humanoid Rig)如果想要動作在blending前後不會移動到collider,除了在Import Settings裡把動作位移鎖住之外,要注意若是進行blending的時間區段中有較大的位移會容易造成collider的移動,因為blending時會吃掉一部分的位移量導致發生誤差。
  • Any State可以立即執行動作
想要立刻執行的動作(例如死亡)可以利用Any State,Any State代表任何時機點且在任何State之上,所以只要觸發條件成立就會立即執行,但其conditions必須是一次性的命令發送。詳細內容:[Unity] Mecanim 強制進入某個State的方法
Any State的觸發時機是任何時候,只要觸發條件成立就會立刻執行
  • 骨架由無實體物件組成時,需要給骨架的root綁定一個mesh
如果骨架是由bone, dummy等無實體的物件組成,且採取骨架、動態分離的檔案規則時,骨架的root需要綁定一個mesh,且動態檔內也必須要留著這個mesh,如此骨架檔才能成功套用到動態。
  • Humanoid Rig會消耗較多的效能
角色的Rig選擇Humanoid會比起Generic消耗更多的效能,而Legacy則是依據開發者所撰寫的controller,當角色越簡單時,使用Legacy會比較省效能。詳細內容:Mecanim Performance and Optimization
  • 當不使用IK功能時,Rig選擇Generic可以避免一些問題
角色需求較單純時使用Generic可以避免一些因為Humanoid的IK所造成的表現性上的誤差(如transition時的位移誤差)。當Rig選擇Generic時可看到Clip設定中的Root Transform Position(XZ)的Based Upon可選項目除了Original(依照動作檔中原始所key的位置)外就是Root Node Position,選擇Root Node Position時會以骨架的root對正(0,0),而Humanoid則是Center of Mass,以骨架體積中心點對正(0,0),因此當角色的腳挪動時僅管hip沒有移動仍然會使角色的位置偏移。
  • Humanoid Rig最好只使用在人類角色上
Humanoid是針對人類型骨架角色設計的,例如因Foot IK是針對單關節(人類的膝蓋)所設計,所以當腿部結構有雙關節時(如羊人的腳),就會發生一些不正常的現象(如滑步明顯、腳步抖動...)。
  • Transition的conditions為bool時,無法調整blending timing
當條件為bool時,代表該transition可以在任何時間發生,所以就只能調整duration而無法調整timing,如果去調整它會發現重新點選該transition時,會被自動歸回中央點。
當conditions為bool時是無法設定transition timing的
  • 承上,transition的conditions可以不只一個
譬如已有一個bool的條件再加上一個exit time條件,可以使transition依照bool判斷觸發,但transition發生的timing會是固定的,也就是你在transition的timeline中所調整的timing。 參考文章:


bool搭配exit time可以指定transition的timing

延伸閱讀:

沒有留言:

張貼留言