摘要:使用Layer可以用來管理角色的不同身體部位。比如下半身用於行走或跑步,上半身用於射擊或投擲物體。
洪流學堂,讓你快人幾步。你好,我是跟着大智學Unity的萌新,我叫小新,這幾週一起來複(yu)習(xi)動畫系統。
“大智,我的Animator狀態機裏面的狀態很多,現在太難管理了。我有很多姿勢,比如不拿槍,拿手槍,拿衝鋒槍,拿步槍,每種姿勢都要做一個混合樹,現在再去加蹲的狀態,簡直爆炸,有沒有什麼好辦法?”
“我看看你的Animator Controller現在是什麼樣子?”
“還是挺整潔的嘛,感覺並沒有很複雜呀”
“這只是表面現象,每個混合樹裏都有好多狀態呀”
“那你想想這些動畫之間有沒有什麼相似的地方可以提取出來的?”
“要說相似的話,它們腿部的動畫是類似的,不管拿槍姿勢如何,腿部都是一樣的,只有胳膊的動畫不太一樣。”
“嗯,這你就算說到點子上了!這時候可以用下Animator Controller中的Layer的相關文檔,你先去看看?”
“就是Parameters邊上那個Layer麼?看到它好久了還一直不知道有什麼用呢!我先去了解了解!”
下面是小新的筆記本中的內容:
Animation Layers
使用Layer可以用來管理角色的不同身體部位。比如下半身用於行走或跑步,上半身用於射擊或投擲物體。
可以從Animator左上角的Layer標籤中管理Layer。
點擊加號可以添加一個Layer。點擊Layer旁邊的齒輪圖標,會彈出一個小窗口,可以設置該Layer對應的參數。
Weight 這一層的權重,0代表該層權重是0(該層不生效),1代表該層權重爲1(該層中的動畫能完全表現)
Mask 設置該Layer能控制身體的哪部分,設置後該Layer上面會顯示一個M的小圖標。詳細筆記見下方
Blending 和其他層混合的模式。
- Override 覆蓋上面的層中對應Mask的部位
- Additive 會加在之前Layer的動畫之上
Sync 複用其他層中的狀態機。詳細筆記見下方
IK Pass 什麼是IK?得問問大智
Avatar Mask
用來設置該Layer的動畫會影響角色的哪一部分的遮罩。
創建Avatar Mask
在Project窗口中右鍵,Create > Avatar Mask點擊後會創建一個AvatarMask文件,此時可以對文件命名。
編輯AvatarMask
AvatarMask有兩種定義身體遮罩的方式:
- 通過Humanoid身體映射圖
- 通過Transform層次結構選擇包含或不包含的骨骼
Humanoid
如果你的動畫是人形動畫,建議用這一種方式可以快速設置AvatarMask。
身體映射圖包含以下幾部分:
- 頭部
- 左臂
- 右臂
- 左手
- 右手
- 左腿
- 右腿
- Root(腳下的圓形陰影部分)
可以通過鼠標點擊每一部分,綠色代表動畫可以影響這一部分,紅色代表動畫不會影響。在空白處點擊可以全選/全不選。
手部和腳部的IK可以開關,表示該部分的IK曲線是否參與動畫混合。IK又出現了,一會去問問大智
Transform
如果動畫沒有使用Humanoid,或者你想更精細的控制遮罩,你可以通過Transform層級結構來控制每一個骨骼。
1、選擇一個Avatar(動畫模型的Avatar)
2、點擊Import Skeleton按鈕。avatar的層級結構會顯示出來。
3、可以設置對應的骨骼是否受動畫控制
其他用途
在模型導入設置的Animation頁籤中,也可以設置Mask,設置後只會導入對應Mask的動畫數據。
在這設置Mask的好處是:可以減少內存佔用和CPU佔用。因爲不需要的身體部位的動畫曲線不會被加載,並且不會參與計算。
實例
比如你想人物保持行走、跑步、站立的同時上身能夠投擲東西,你可以按下圖設置Layer:
Sync
有時能夠在不同的Layer重用其他Layer的狀態機非常有用。比如你想模擬一個“受傷”的狀態,你有受傷狀態的各種動畫比如走跑跳。這時候你可以選中Sync複選框,選擇你想要同步的Layer。狀態機的結構會保持一致,但是可以設置不同的Animation Clip。選中時,Layer旁邊會有一個S小圖標。
這意味着,同步出來的Layer不需要再去定義狀態機,並且源Layer中狀態機的任何變化都會同步到這一同步Layer。唯一需要你做的就是設置每個State中使用的動畫。
Sync複選框旁邊還有一個Timing複選框。
- 不選中時,Sync出來的Layer中每一個State的動畫長度會變爲源Layer中的時長。
- 選中時,根據Weight調整動畫時長,Weight爲1時使用Sync Layer中的動畫時長。
“大智,我看完了,這個東西還是很強大的呀,正好符合我的需要。不過這裏面有好多地方提到了IK,這個IK是什麼東西呢?”
“IK是Inverse Kinematics的縮寫,也就是反向動力學。”
“那是不是還有正向動力學?”
“沒錯,你都會舉一反三了!大多數動畫是通過旋轉骨骼來實現的。子骨骼的位置跟着父骨骼的旋轉而改變,因此關節鏈的終點可以根據前面的各個骨骼的角度和相對位置確定。這種構成骨骼動畫的方法稱爲正向動力學。”
“那反向動力學是不是就是根據骨骼的最終節點,反向推算之前的骨骼節點的位置?”
“喲,不錯哦,有長進。正如你所說的一樣。有些時候我們需要根據空間中的位置來確定骨骼節點的位置,比如讓角色拿槍,不同的槍可能握持的位置不太相同,就需要根據握持的位置來決定角色手的位置。Unity中的IK支持所有人形動畫。”
“這樣說我就有些明白了,Animator中的State設置中的Foot IK是不是就是設置腳部受IK的影響?”
“是的。”
“那Layer中的IK Pass是什麼意思呢?”
“選中IK Pass的時候,每幀會調用腳本中的OnAnimatorIK方法,可以在這個方法中動態設置IK,這個明天給你細講一下。”
“好~”
總結
小新:“有了Layer,我感覺我的動畫可以分爲上半身和下半身兩個Layer,這樣一來就不需要對每個拿槍的動作設置移動的混合樹了,應該能簡化不少工作。”
“確實是這樣,合理利用Layer不僅可以減少動畫師的動畫製作工作量,還能在性能上對遊戲進行優化。”
今日思考題
小新:“那我現在就去就用Layer改造下我的狀態機”
“今天真自覺,哈哈,我本來也想給你佈置這個小作業呢!”
“我去也!”
大智:“收穫別忘了分享出來!別忘了點擊右下角請好友看免費分享給你的朋友,也許能夠幫到他。”
擴展閱讀
- Unity動畫系統詳解1:在Unity中如何製作動畫?
- Unity動畫系統詳解2:如何導入使用外部的動畫?
- Unity動畫系統詳解3:如何播放、切換動畫?
- Unity動畫系統詳解4:如何用代碼控制動畫?
- Unity動畫系統詳解5:BlendTree混合樹是什麼?
- Unity動畫系統詳解6:如何做好角色的移動動畫?(Root Motion詳解)
- 【建議收藏】找不到免費的角色動畫?來試試mixamo
【擴展學習】在洪流學堂公衆號回覆
動畫
可以閱讀本系列所有文章,更有視頻教程等着你!
呼~ 今天小新絮絮叨叨的真是夠夠的了。沒講清楚的地方歡迎評論,咱們一起探索。
我是大智(微信:zhz11235),你的技術探路者,下次見!
別走!點贊,收藏哦!
好,你可以走了。