Unity Animation -- 導入動畫
? ? ? ? 盡管Unity中的動畫工具已經比較強大了,但對于非常復雜的或很長的動畫,通常是由外部DCC創(chuàng)建。特別是對于角色動畫來說,需要在動畫過程中進行復雜的控制。因此我們通常需要將外部制作的動畫導入到Unity中。
動畫能被共享嗎
? ? ? ? 對于復雜的動畫,制作過程會非常耗時。動畫師常常要決定在一個項目中如何最佳地分配時間和精力。對于背景中的角色或不需要單獨制作的動畫,可以選擇使用預先構建好的動畫。并非所有角色類型都能輕易地使用為另一個rig所構建的動畫(關于rig,可以先簡單理解為骨骼)。但在Unity中,只要是遵循基礎的humanoid形狀(一個頭,兩條胳膊,兩條腿兒)的角色,都能使用人形動畫系統(tǒng)(Humanoid Animation System)。在這個系統(tǒng)中,Unity會根據rig里的關節(jié)信息,將現(xiàn)有的動畫從一個人形角色轉換到另一個角色上。這就是說即便外觀看起來非常不同的角色也能共享同樣的動畫集。

https://www.bilibili.com/video/BV18Q4y1671n/?spm_id_from=333.788&vd_source=474bff49614e62744eb84e9f8340d91a
配置動畫類型
? ? ? ? 我們想要導入Unity的動畫,可能有多個動畫文件表示不同的動畫,也可能只在一個動畫文件里包含了多有動作的動畫。對于一個動畫文件包含多個動作動畫的情況,導入Unity后,我們可以在import setttings里進行分割。
? ? ? ? 接下來我們以人形動畫為例來看看,動畫類型的配置過程。
? ? ? ? 1. 在Animations目錄中,選擇我們要導入的動畫,案例中是一個Dance_x3的動畫(Unity官方Creative Core -> Animation部分有相關資源包,如果要使用請自行去下載)。
? ? ? ? 2. 在Inspector中,選擇Rig標簽頁,這個標簽頁包含了rig相關的導入選項。

? ? ? ? 3. 我們將Animation Type選擇為Humanoid,然后點擊Apply。

配置第一個動畫片段
? ? ? ? 接下來我們來看看動畫導入設置中的Animation標簽頁。
? ? ? ? 1. 在動畫的Inspector中,選擇Animation標簽頁。
? ? ? ? ?2. 在Inspector的底部,點擊Play按鈕預覽動畫。
? ? ? ? ? ? ? ? 我們可以看到,這個導入的動畫里,有三種不同的跳舞的動作序列。我們要將這三個動作分別做成三個動畫片段。在Animation標簽頁的上半部分,有一個Clips,這個Clips就是我們定義獨立動畫片段的地方了。
? ? ? ? 3. 在Clips部分,點擊“+”按鈕兩次,復制一下當前的動畫片段。


? ? ? ? 5.? 我們在動畫預覽窗口中,我們通過拖動鼠標來確定一下第一個跳舞動畫的開始幀和結束幀。

? ? ? ? 6. 在End中,填入150。
? ? ? ? 7. 預覽動畫,確保動畫循環(huán)播放時看起來無縫銜接,如果有需要就調整End的值。
? ? ? ? ? ? ? ? 注意:在預覽窗口中,動畫是循環(huán)播放的,但實際上這個動畫當前被設置為了只播放一次。
? ? ? ? 8. 啟用Loop Time,讓動畫能夠循環(huán)播放。
?? ? ? ? ? ? ? ? 我們會觀察到在預覽窗口中,角色腳下的地面看起來像是在移動。這是因為這個動畫序列關聯(lián)了root motion。如果打開root motion,則角色在動畫過程中看起來就像是在地面上滑動著。當前案例中,我們將其簡單地關閉掉就好了。關于root motion本身,B站一位大佬(前面提到的那位)有非常詳細地說明,請到B站去看看大佬關于root motion講解的視頻。
? ? ? ? 9. 在Root Transform Rotiaon, Root Transform Position(Y)和Root Transform Position(XZ)中,啟用Bake inot Pose。

? ? ? ? ?現(xiàn)在預覽動畫時,地面看起來不會再發(fā)生變化了。
配置剩下的兩個動畫片段
? ? ? ? 1. 選擇Clips列表里的第二個動畫片段(當前名字為Take001),將其重命名為Dance_02。
? ? ? ? 2. 設置開始幀為151,結束幀為260。
? ? ? ? 3. 啟用Loop Time。
? ? ? ? 4.?在Root Transform Rotiaon, Root Transform Position(Y)和Root Transform Position(XZ)中,啟用Bake inot Pose。
? ? ? ? 5. 選擇Clips列表中的最后一個片段,將其重命名為Dance_03。
? ? ? ? 6. 將其開始幀設為261,結束幀設為350。
? ? ? ? 7. 啟用Loop Time。
? ? ? ? 8.?在Root Transform Rotiaon, Root Transform Position(Y)和Root Transform Position(XZ)中,啟用Bake inot Pose。
? ? ? ? 做完這些操作后,在Inspector中滾動鼠標找到最下方的Apply,點擊它保存所有修改。

? ? ? ? 我們可以將新增的動畫片段加入到現(xiàn)有的Animator Controller中。案例中所使用的Animation Controller名字為Shared_Controller。
? ? ? ? 1. 在Animations目錄下找到Shared_Controller,雙擊在Animator中打開這個文件。
? ? ? ? 2. 我們將Animator放置到場景視圖下方,這樣方便同時觀察場景和Animator。


? ? ? ? ? ? ? ? 為場景中的要跳舞的每個角色,都掛上一個DanceParty的腳本,這個腳本功能很簡單,在按不同按鍵時(Q,W,E),會對應去觸發(fā)Dance_01,Dance_02和Dance_03三個Trigger類型的參數。腳本內容如下:

? ? ? ? 5. 在Animator中的Parameters頁面中,點擊“+”,添加三個Trigger參數,名字和腳本里的Trigger參數名一樣。

? ? ? ? ? ? ? ? ?當用戶按下Q,W或E時,角色應該停止他們正在做的動作并開始跳舞。由于這對于任何時間點來說都必須要發(fā)生的事情,因此我們使用Any State節(jié)點。Any State節(jié)點可以打斷狀態(tài)機里的任何轉換(transition)過程,并且調用和它關聯(lián)的動畫。
? ? ? ? 8. 在Animatior中,右鍵點擊Any State節(jié)點,選擇Make Transition,將它和Dance_01節(jié)點相連。
? ? ? ? 9. 選擇這個新建的轉換(transition),在其Inspector中點擊“+”,在conditions那里,選擇Dance_01參數。
? ? ? ? 10. 右鍵點擊Dance_01節(jié)點,選擇Make Transition,并且將它和Exit節(jié)點相連。
? ? ? ? 11. 用相同的方法設置Dance_02和Dance_03。

? ? ? ? 12. 點擊Play,按Q,W,E鍵看看效果。