前期提要
如同上一篇文章介紹的設置,角色能正常實現待機——向前起步——行走循環——結束行走——待機多個動畫播放跟切換。(下圖為啟用RewindDebugger的截圖,紅色點及路徑為歷史位置及軌跡,藍色點為預測的位置點與路徑)
![](https://image.gcores.com/84ee2a421f1cdb0381b2be4a71498329-1212-661.png)
當我們旋轉鏡頭時,角色也會按照當前的前向行走,由於轉向速度夠快,我們就感覺角色在沿著圓弧運動,而預測的路徑也會呈圓弧狀。
![](https://image.gcores.com/9c16f14998176a4b5097a9a95ce34360-1440-729.png)
但當我們嘗試向後或左右方向移動時,那就穿幫了。角色會突然轉向前向方向,然後開始播放起步動畫。
![](https://image.gcores.com/a66831262cc6f4d729a0c7e358b900f3-1268-732.png)
![](https://image.gcores.com/4d820810fc8c8dc38292c66f2a9b098f-1123-700.png)
要解決這個問題,那就要先搞懂兩個東西,第一個是:旋轉模式。
旋轉模式
UE裡的旋轉模式分兩種,Strafe與Orient to movement。用法環來解釋就是,褪色者鎖定視角到敵人,褪色者的前向是面向敵人的方向,就是Strafe;褪色者正常行走時,角色的前方是接受到的輸入的方向(就算在輸入前角色的前方是正前方,輸入向後的動作指令,角色轉向後方),就是Orient to movement(由於Orient to movement這一串太長了,後面將簡稱為Orient)。由於我使用的是虛幻默認的第三人稱遊戲模板,其默認設置Orient to movement為真,當角色正前方向與輸入方向不一致時,角色會旋轉至輸入方向。
![](https://image.gcores.com/6367a9e1a65465f6539226fe34a59c93-1386-504.png)
若將Orient的選項取消,在進行運動測試,會發現角色會以向前起步行走的姿勢進行輸入方向的移動。
![](https://image.gcores.com/8c98d4537bce7953f696c481d8bd6395-1448-1084.png)
這個就很明顯了,因為取消了Orient之後(即Strafe狀態下),角色不會轉向移動方向,自然就保持當前朝向進行移動了。
現在思考一下,如果需要角色在Strafe狀態下(即取消Orient to Movement),向四方移動時能像開頭描述那樣能正常播放切換不同動畫,需要怎麼操作?嗨!直接在PSD里加動畫資產就好啦,反正不同動畫的過渡條件例如未來速度Future Velocity、Speed2D等參數的設置都類似,應該不會出錯的!此乃第二個坑。
以向左移動為例,分別向之前的Start、Jog、Stop的PSD中加入左向起步、行走循環、停止的動畫資產,然後播放場景測試一下。
![](https://image.gcores.com/aa941def57c5840f28be3352b0922ae4-1302-570.png)
在向左移動時,能正常播放向左行走的動畫,但是在向前移動時,意外地還是播放向左起步的動畫。
![](https://image.gcores.com/d0b02d6c6c591ee85ca2814e0977132b-1587-1151.png)
![](https://image.gcores.com/5aabe9d15573efe281d809d73c46c9f3-1593-1005.png)
多次播放場景測試,儘管有些時候能正確依照移動方向播放相應的動畫,但仍然會出現搭錯線的情況。這時候就引出了之前說的第二個問題:根骨骼運動。
![](https://image.gcores.com/b68905c1c7a8fdb8c12a9676c49a16d2-1405-1139.png)
根骨骼運動
在UE裡,如果一個角色在播放一個末尾位置與起始位置距離很大的不含(或不啟用)根骨骼運動的動畫,那在動畫播放結束時,會看到角色,或者說這個角色的模型,會從末尾位置被拖拽回到起始位置(如下圖演示,圖片來源於虛幻官方文檔)
![](https://image.gcores.com/1ea72cbeb68d9f02f5e7553fa7455bcb-437-392.gif)
若該動畫包含(並啟用)根骨骼運動,則如下圖所示
![](https://image.gcores.com/0b0c24d08529f3d3c282a5c2ed8bc693-461-413.gif)
可以注意到角色播放動畫結束時,是以膠囊形狀的線框(膠囊體)為位置基準,啟用了根骨骼運動之後,膠囊體會跟隨骨骼體的運動,而常說的角色位置,一般就是說的膠囊體的位置,也就是說,當角色啟用了根骨骼運動後,角色會跟隨帶有根骨骼運動數據的動畫移動。(開始拗口起來了)在動畫資產中需要點選以下選項才能啟用根骨骼運動。
![](https://image.gcores.com/d23673b766d398c4b10fa9f851326ac6-1334-560.png)
但是在PSD中,明明看到根骨骼運動啟用了呀!(選中的動畫欄中,白色的拖尾箭頭表示啟用了根骨骼運動)
![](https://image.gcores.com/fe75a7d7c7a4781b70582337d9855982-1302-570.png)
是的沒錯!確實已經啟用了!所以問題就是,這些向左起步、行走循環、停止的動畫,都不包含根骨骼運動數據。以下使用Lyra的動畫資產進行對比。
骨骼樹中選中根骨骼Root,拖動時間軸遊標,注意右邊的Mesh Relative的Location數據差異。
![](https://image.gcores.com/316621b89fc29d8e4299659ea9688a49-1963-808.png)
![](https://image.gcores.com/f80818a52884eca0a0dfd99c0b71aebb-1962-917.png)
可以看到角色骨骼體在視口位置的差異以及右邊的Mesh Relative的Location數據差異。這是包含根骨骼運動的動畫資產。再看原本機器人的動畫資產(機器人原本材質顏色是綠色的,在上述案例中只是給替換了材質,並無其他設置)。
![](https://image.gcores.com/65b34775dc938db35be18952c541fc6f-1955-889.png)
![](https://image.gcores.com/e54ad2001ed6aafb106e502d7c4454fd-1955-889.png)
可以看到機器人的行走動畫並不會真實向前移動,也就是不包含根骨骼動畫數據。
那這個根骨骼動畫,跟MM系統正確選擇動畫資產播放,有咩關係?
關於匹配
回過來看看官方對於MM系統的介紹
![](https://image.gcores.com/4af8599c3f6c75f8268255dde803fe8f-696-137.png)
![](https://image.gcores.com/39eb9050d8b5b5859b18cf827fb97d33-290-212.gif)
官方介紹說“從數據庫中選擇動畫姿勢,在運行時匹配動態系統查詢”。“匹配”,也就是使用數據庫裡的動畫姿勢,與某個給定的參考值進行差異對比,得出差異最小的動畫姿勢就是即將播放的動畫。
在MM系統運行中,角色運動時位於角色前面的軌跡是MM系統基於該角色的運動組件中參數配合運動輸入進行預測的。在機器人的案例中,機器人角色往正前方移動,其預測的軌跡點位於角色正前方,但卻選擇了向左行走的動畫,說明了是“MM系統對預測的軌跡點匹配了錯誤的動畫資產”,將本該向左的動畫姿勢匹配到了向前的運動中。對於預測的軌跡與動畫的匹配,其中重要的因素之一就是根骨骼運動,說白了就是在MM系統中,預測的軌跡與根骨骼的變換趨勢是重要的匹配因素之一。
關於匹配的問題展開說的話要涉及到PSS跟PSD的配置,那這裡就直接演示根骨骼的與預測軌跡的匹配吧。新建兩個PSD(因為僅用於測試,所以直接使用默認設置就好,所需要的PSS也可以臨時創建一個套用),一個用於存放機器人的行走動畫,一個用於存放Lyra項目的行走動畫。
![](https://image.gcores.com/36a8e4ba612210490e8d06014eb17708-1645-524.png)
這是存放機器人行走動畫的PSD,由於其動畫資產不帶根骨骼運動數據,所以是否啟用根骨骼運動並不影響結果,在預覽窗口中看到四個動畫都擠在原點。
![](https://image.gcores.com/2c642ce49cf2755c460c7d17a807495d-1639-575.png)
這是存放Lyra項目行走動畫的PSD,其動畫資產帶根骨骼運動數據,因此在預覽窗口中能看到四個動畫能分別向四個方向走開,而不是擠在原點。(窗口中的顏色點、線等可以忽略,那是在PSS中進行設置的,不影響預覽結果)。
當角色向前移動時,其預測軌跡向前,此時運行MM系統,對數據庫中的動畫逐個查詢,以其根骨骼的變換趨勢進行對比,若查詢到某個動畫的根骨骼也向前移動,並且其他特徵差異也最小,那該動畫即將於當前動畫進行過渡直至播放該動畫。
太多字了請看
返回來,我們應該怎麼去解決這個問題呢?答案是,在對這些動畫資產補充根骨骼運動數據前,無法按照官方MM案例的設置實現這個效果(攤手)。
![](https://image.gcores.com/3877e81972c0d0d9641780d822c579d5-568-130.png)
所以搞了這麼久,只有一個實現不了效果的結論。就當是提前認識MM系統的資產準備了,磨刀不誤砍柴工嘛。下篇文章開始將使用Lyra資產重頭構建一個能用的MM系統,又是敲鍵盤的一天咯。