畫修改實(shí)戰(zhàn):從資產(chǎn)編輯到重定向與蒙太奇驅(qū)動(dòng))
做UE開發(fā)不管你是做單機(jī)玩法、多人在線還是虛擬制片、數(shù)字人遲早會(huì)碰上一個(gè)繞不開的需求動(dòng)畫修改與動(dòng)畫編輯。角色拿來的動(dòng)作總是“差那么一點(diǎn)意思”——走路顛簸、抬手太高、攻擊判定跟動(dòng)畫錯(cuò)位、換個(gè)體型骨骼就完全變形……這些都得靠動(dòng)畫修改來解決。我之前帶一個(gè)模擬項(xiàng)目的時(shí)候美術(shù)給了一套A角色的近戰(zhàn)連招策劃臨時(shí)要求套用到另一個(gè)體型完全不一的B角色身上順便把出刀幀提前兩幀還要求跑步時(shí)左手能疊加一個(gè)舉火把的動(dòng)作。這三個(gè)需求分別走了三條路動(dòng)畫重定向、曲線關(guān)鍵幀微調(diào)、動(dòng)畫層疊加。做完這一輪我就發(fā)現(xiàn)所謂的“UE動(dòng)畫修改”從來不是單點(diǎn)操作而是資產(chǎn)級(jí)編輯、播放邏輯編輯、骨骼映射編輯、程序化驅(qū)動(dòng)四件事的交叉。這篇內(nèi)容把我這些年做UE動(dòng)畫修改的常用路徑和踩過的坑按順序整理出來。不管你是剛接觸引擎動(dòng)畫編輯的新手還是已經(jīng)會(huì)改狀態(tài)機(jī)但遇到重定向或蒙太奇問題的人都可以對著步驟抄。1. 動(dòng)畫修改的第一步先分清改的是“資產(chǎn)”還是“邏輯”很多人打開UE就急著找動(dòng)畫編輯器其實(shí)動(dòng)畫修改這件事在動(dòng)手之前最該做的不是操作而是判斷需求屬于哪一層。我通常把動(dòng)畫修改拆成四個(gè)層次資產(chǎn)層、邏輯層、映射層、驅(qū)動(dòng)層。分錯(cuò)層十有八九會(huì)白干。1.1 四類常見的動(dòng)畫修改需求我在項(xiàng)目里遇到的修改需求基本逃不出下面四類資產(chǎn)層修正動(dòng)畫本身有問題比如關(guān)鍵幀擺得不對、某根骨骼在某一幀穿模、動(dòng)畫循環(huán)接縫處跳變、播放速率太慢。這類修改直接在動(dòng)畫資產(chǎn)內(nèi)部動(dòng)刀改曲線、改關(guān)鍵幀、改循環(huán)屬性。邏輯層重組動(dòng)畫沒問題但“什么時(shí)候播放哪個(gè)動(dòng)畫”需要改。比如角色從站立切到奔跑中間要不要經(jīng)過一個(gè)過渡姿勢跑步和走路切換用什么條件判斷。這屬于動(dòng)畫藍(lán)圖狀態(tài)機(jī)與混合空間的工作。映射層適配動(dòng)畫源角色和目標(biāo)角色骨骼結(jié)構(gòu)不同直接把動(dòng)畫資產(chǎn)拖到新骨架上會(huì)扭曲。這時(shí)要做的是骨骼重定向讓一套動(dòng)作適配不同體型的角色。驅(qū)動(dòng)層程序化疊加基礎(chǔ)動(dòng)作之上臨時(shí)增加效果比如跑步時(shí)揮刀、受擊時(shí)硬直、根據(jù)角色速度動(dòng)態(tài)改變播放速率。這類修改通常靠動(dòng)畫層Anim Layer、蒙太奇或者藍(lán)圖/C實(shí)時(shí)控制。1.2 三種修改路線的選型邏輯同樣的需求往往有不止一種做法。比如“讓角色跑步時(shí)拿手機(jī)”你可以直接在動(dòng)畫資產(chǎn)里把拿手機(jī)姿勢K進(jìn)關(guān)鍵幀資產(chǎn)層也可以在動(dòng)畫藍(lán)圖里疊加一層Additive動(dòng)畫邏輯層還可以做一個(gè)單獨(dú)的拿手機(jī)姿勢然后按需求混合驅(qū)動(dòng)層。選哪條路核心看兩點(diǎn)復(fù)用頻率和變化幅度。如果是固定角色、固定動(dòng)作資產(chǎn)層改最直接改完即所得如果這個(gè)動(dòng)作要套用給多個(gè)角色、或者隨時(shí)可能被策劃調(diào)參那就要做成邏輯層或驅(qū)動(dòng)層。我用下面的表格總結(jié)一下修改方式適用場景優(yōu)勢劣勢資產(chǎn)層直接編輯單角色微調(diào)、動(dòng)作源修復(fù)直觀、可控到逐幀復(fù)用性差改一個(gè)角色就要改一遍動(dòng)畫藍(lán)圖狀態(tài)機(jī)/混合播放邏輯切換、多狀態(tài)過渡靈活條件可編程需要理解狀態(tài)機(jī)概念配條件易混亂重定向一個(gè)動(dòng)畫源套用多個(gè)角色一套動(dòng)作到處用骨骼差異大時(shí)誤差明顯需反復(fù)校準(zhǔn)蒙太奇程序化驅(qū)動(dòng)按事件觸發(fā)動(dòng)作、動(dòng)態(tài)疊加與玩法強(qiáng)交互打斷恢復(fù)方便狀態(tài)多了調(diào)度容易亂選型還有一個(gè)隱藏標(biāo)準(zhǔn)誰在維護(hù)。如果項(xiàng)目里改動(dòng)畫的是純美術(shù)資產(chǎn)層和重定向優(yōu)先如果維護(hù)者是程序或技術(shù)策劃邏輯層和驅(qū)動(dòng)層更合適。別小看這一點(diǎn)我之前見過美術(shù)改了三個(gè)小時(shí)的資產(chǎn)結(jié)果策劃用藍(lán)圖一疊加全部白改。2. 動(dòng)畫資產(chǎn)的導(dǎo)入與基礎(chǔ)編輯實(shí)操當(dāng)你確定需求落在資產(chǎn)層就需要進(jìn)動(dòng)畫編輯器里動(dòng)關(guān)鍵幀和曲線了。但在動(dòng)之前動(dòng)畫資產(chǎn)能不能正常工作取決于導(dǎo)入那一關(guān)設(shè)置得對不對。很多“動(dòng)畫奇怪”的問題源頭其實(shí)在FBX導(dǎo)入時(shí)埋下的。2.1 FBX導(dǎo)入動(dòng)畫時(shí)最容易出問題的四個(gè)設(shè)置導(dǎo)入動(dòng)畫時(shí)我建議你重點(diǎn)檢查這幾個(gè)選項(xiàng)骨骼網(wǎng)格體Skeleton導(dǎo)入動(dòng)畫前必須指定目標(biāo)骨架。選錯(cuò)骨架引擎會(huì)直接報(bào)“骨骼不匹配”或者導(dǎo)入后骨骼名字對不上動(dòng)畫躺在地上。這個(gè)選項(xiàng)在導(dǎo)入面板的“Skeleton”一欄必須選項(xiàng)目中已有的骨架資產(chǎn)。采樣率Sample Rate通常設(shè)為項(xiàng)目的動(dòng)畫采樣幀率比如30或60。采樣率過低高速動(dòng)作會(huì)丟細(xì)節(jié)比如揮劍軌跡抽搐采樣率過高資產(chǎn)體積膨脹運(yùn)行時(shí)性能白損耗。一般游戲項(xiàng)目用30幀足夠講究手感格斗類用60。去除根骨骼運(yùn)動(dòng)Remove Root Motion這個(gè)選項(xiàng)決定了動(dòng)畫位移是否保留。如果你想讓角色在動(dòng)畫播放期間被根骨骼帶著走比如翻滾位移、Boss入場就別勾如果位移是交給角色藍(lán)圖里的移動(dòng)組件算的那就勾上。絕大多數(shù)情況下玩家角色的普通走路、跑步動(dòng)畫都不要根位移否則會(huì)和移動(dòng)組件“打架”角色會(huì)滑步或瞬移。網(wǎng)格體導(dǎo)入Import Meshes in Bone Hierarchy如果只是導(dǎo)入動(dòng)畫建議關(guān)掉網(wǎng)格體導(dǎo)入否則資產(chǎn)里掛一堆無用網(wǎng)格還會(huì)拖慢骨架層級(jí)檢查速度。導(dǎo)入完成后雙擊動(dòng)畫資產(chǎn)進(jìn)動(dòng)畫編輯器。如果你的動(dòng)畫沒按預(yù)期播放先別急著改關(guān)鍵幀去資產(chǎn)詳情面板看“動(dòng)畫”部分的基礎(chǔ)參數(shù)。2.2 動(dòng)畫資產(chǎn)屬性面板的基礎(chǔ)關(guān)鍵參數(shù)動(dòng)畫資產(chǎn)里有一組參數(shù)經(jīng)常被忽略但它們對播放影響極大循環(huán)播放Loop勾選后才能在狀態(tài)機(jī)里作為循環(huán)動(dòng)作使用。不勾的角色進(jìn)入跑步狀態(tài)播放一次就停下像被人點(diǎn)了暫停。開始/結(jié)束幀Start/End Frame有時(shí)候美術(shù)導(dǎo)出的是整段動(dòng)作序列包含預(yù)備、主動(dòng)作、收尾。在資產(chǎn)內(nèi)部你可以通過設(shè)置Start Frame和End Frame截取其中一段避免在DCC里二次導(dǎo)出。這個(gè)修改很實(shí)用但很多人不知道動(dòng)畫資產(chǎn)里可以直接裁。播放速率Rate Scale整體變速。比如原來動(dòng)畫是2秒一套揮拳Rate Scale1.5可以讓它1.33秒播完。這個(gè)修改適合粗略調(diào)整節(jié)奏。偏移末幀Offset新版本引擎里有“播放偏移”的概念常用于處理動(dòng)作循環(huán)接縫讓循環(huán)點(diǎn)在動(dòng)作自然位置而不是資源末尾。2.3 曲線與關(guān)鍵幀的微觀編輯真正的高頻操作是改關(guān)鍵幀。在動(dòng)畫編輯器的“骨骼樹”里選中某根骨骼右側(cè)曲線面板會(huì)列出它的位移、旋轉(zhuǎn)、縮放曲線。你能做的事情包括選中曲線上的關(guān)鍵幀上下拖動(dòng)調(diào)整數(shù)值在時(shí)間軸上右鍵插入或刪除關(guān)鍵幀調(diào)整關(guān)鍵幀的切線類型讓動(dòng)作更順滑或者更硬朗通過“時(shí)間壓縮/拉伸”工具選中一段曲線整體前后移動(dòng)實(shí)現(xiàn)“出刀提前兩幀”這種需求。舉個(gè)例子。之前一個(gè)項(xiàng)目里策劃說武器判定總比動(dòng)畫慢半拍表現(xiàn)就是“刀子砍過去了傷害才出來”。這在資產(chǎn)層有兩種改法一是把武器骨骼的出刀關(guān)鍵幀向前挪兩幀二是直接把攻擊判定通知AnimNotify的時(shí)間點(diǎn)移動(dòng)。兩種都行但前者影響動(dòng)畫表現(xiàn)后者只影響判定事件。如果動(dòng)畫表現(xiàn)本身沒問題只是判定事件對不上那就只改Notify時(shí)間點(diǎn)不要?jiǎng)觿?dòng)畫曲線這樣美術(shù)那邊不會(huì)覺得“動(dòng)畫又變怪了”。實(shí)操心得編輯曲線時(shí)最好在打開“骨骼樹曲線圖”的布局下進(jìn)行只看骨骼列表容易丟失時(shí)間軸上下文。養(yǎng)成經(jīng)常按快捷鍵“鎖定視圖”的習(xí)慣避免誤選骨骼。3. 動(dòng)畫藍(lán)圖里做邏輯編輯狀態(tài)機(jī)與混合空間的組合拳資產(chǎn)層改完下一步是把動(dòng)畫變成一個(gè)“會(huì)反應(yīng)”的系統(tǒng)。在UE里這個(gè)系統(tǒng)核心就是動(dòng)畫藍(lán)圖。動(dòng)畫玩得好不好很大程度上看動(dòng)畫藍(lán)圖構(gòu)建得是否干凈。3.1 動(dòng)畫藍(lán)圖的兩個(gè)圖EventGraph與AnimGraph動(dòng)畫藍(lán)圖是掛在骨架Skeleton上的特殊藍(lán)圖它有兩張主要的圖EventGraph負(fù)責(zé)邏輯運(yùn)算比如獲取角色速度、判定角色是否在地面、讀取自定義變量。這些變量最終會(huì)傳給AnimGraph使用。AnimGraph負(fù)責(zé)輸出最終姿勢。它是一棵“姿勢計(jì)算樹”從最終的輸出姿勢節(jié)點(diǎn)往上回溯會(huì)看到一堆混合、分支、狀態(tài)機(jī)節(jié)點(diǎn)。初學(xué)者最容易犯的錯(cuò)是在AnimGraph里直接放大量計(jì)算節(jié)點(diǎn)比如每幀獲取角色速度。正確做法是在EventGraph里算好、存成變量然后在AnimGraph里只讀取變量。這既清晰又省性能畢竟AnimGraph里每個(gè)節(jié)點(diǎn)都在逐幀評估。3.2 狀態(tài)機(jī)讓站立、走路、跑步按規(guī)則切換狀態(tài)機(jī)State Machine是動(dòng)畫邏輯層的核心。你在AnimGraph里拖一個(gè)“狀態(tài)機(jī)”節(jié)點(diǎn)雙擊進(jìn)去就能看到狀態(tài)列表和連線。我常用的配置是“Idle / Walk / Run / Jump / Fall”這幾個(gè)狀態(tài)連線代表允許切換每條連線上可以寫過渡規(guī)則。寫過渡規(guī)則時(shí)有幾個(gè)實(shí)踐經(jīng)驗(yàn)過渡時(shí)間Blend Time狀態(tài)切換的混合時(shí)間決定了動(dòng)作銜接的順滑度。站立到走路通常0.2秒左右下落落地到站立建議0.1秒以內(nèi)否則會(huì)有“飄”的感覺。過渡規(guī)則條件比如Idle→Walk的條件是“速度大于10”Walk→Idle的條件是“速度小于10”。注意兩個(gè)條件之間留出滯回區(qū)間否則速度在10附近震蕩時(shí)兩個(gè)狀態(tài)會(huì)瘋狂來回切換動(dòng)畫一直抽搐。自動(dòng)過渡Automatic Rule如果兩個(gè)狀態(tài)之間不需要特定條件可以使用“自動(dòng)過渡”適合一些臨時(shí)狀態(tài)比如受擊返回到原狀態(tài)。實(shí)操過程中我最常排掉的問題是“動(dòng)畫卡在過渡中間”。這種情況多半是過渡時(shí)間過長且目標(biāo)狀態(tài)循環(huán)動(dòng)畫又和源動(dòng)畫差距太大。解決方式就是縮短過渡時(shí)間或者在過渡規(guī)則里設(shè)置“過渡完成百分比”確保新動(dòng)畫完全接管后才允許再次切換。3.3 混合空間從離散狀態(tài)走向連續(xù)運(yùn)動(dòng)狀態(tài)機(jī)適合離散狀態(tài)切換但要讓角色在“走路→跑步”之間連續(xù)變化靠狀態(tài)機(jī)去一首一首切動(dòng)畫是做不到順滑的這時(shí)候需要混合空間Blend Space?;旌峡臻g本質(zhì)上是一個(gè)坐標(biāo)軸系統(tǒng)。橫軸常設(shè)為速度縱軸常設(shè)為方向角。你在坐標(biāo)平面的不同位置放入不同動(dòng)畫姿勢樣本引擎根據(jù)坐標(biāo)值自動(dòng)插值出來一個(gè)連續(xù)姿勢。操作上內(nèi)容瀏覽器右鍵→動(dòng)畫→混合空間1D或2D雙擊進(jìn)入編輯指定橫軸名稱如“Speed”、范圍0~800、軸分組數(shù)量如5個(gè)點(diǎn)把動(dòng)畫資產(chǎn)拖到坐標(biāo)點(diǎn)上在動(dòng)畫藍(lán)圖AnimGraph里拖出混合空間節(jié)點(diǎn)把“Speed”連接到一個(gè)變量上。需要注意混合空間的樣本動(dòng)畫必須是同一套骨架且姿勢差異不要過大。如果把“轉(zhuǎn)身動(dòng)畫”放在軸向不一致的位置混合時(shí)會(huì)看到角色角度跳變?;旌峡臻g里坐標(biāo)軸數(shù)值要和游戲內(nèi)實(shí)際參數(shù)對應(yīng)比如移動(dòng)速度單位是cm/s混合空間橫軸就要以cm/s為單位否則角色明明在跑步混合空間卻只采樣到走路姿勢。3.4 動(dòng)畫層在不破壞基礎(chǔ)動(dòng)作的前提下疊加內(nèi)容動(dòng)畫層Animation Layer是動(dòng)畫藍(lán)圖里一個(gè)很好用的功能但使用率不高。它的作用恰如標(biāo)題里的“動(dòng)畫修改”——在已有動(dòng)畫之上再疊一層效果而不改動(dòng)原始資產(chǎn)。舉個(gè)例子。角色跑步動(dòng)畫是下位層你要疊一個(gè)“掩護(hù)舉槍”的上位層??梢孕陆ㄒ粋€(gè)動(dòng)畫層藍(lán)圖接口在AnimGraph里放入“分層混合Layered Blend Per Bone”節(jié)點(diǎn)。下層接跑步動(dòng)畫上層接舉槍姿勢通過“Layer Filter”指定只有上半身骨骼會(huì)受到上層影響下半身繼續(xù)保持跑步動(dòng)作。這樣做出一個(gè)“邊跑邊舉槍”的效果原始跑步動(dòng)畫一個(gè)關(guān)鍵幀都不用改。在項(xiàng)目里我經(jīng)常把動(dòng)畫層用在持槍、持物、表情、附加表情等場景。搭配動(dòng)畫曲線控制層的權(quán)重比如一條“掩護(hù)強(qiáng)度”曲線從0升到1動(dòng)畫層會(huì)平滑地疊加效果比直接切換姿勢好得多。使用動(dòng)畫層避坑混合骨骼的權(quán)重要注意上層的骨骼如果包含脊椎和頭部要小心動(dòng)作沖突。比如上層做頭部轉(zhuǎn)向下層跑步動(dòng)畫本身頭也有擺動(dòng)兩個(gè)權(quán)重疊加會(huì)出現(xiàn)頭部抽搐。解決辦法是給上層骨骼設(shè)置高權(quán)重或者直接用“覆蓋”模式而非“疊加”模式。4. 動(dòng)畫重定向讓一套動(dòng)畫適配不同的角色骨架做UE動(dòng)畫編輯最容易讓新手崩潰的就是重定向。你自己項(xiàng)目里的一套角色動(dòng)畫換到一個(gè)長相、比例完全不同的角色上動(dòng)畫直接變成“喪尸版”或者“面條人版”各個(gè)關(guān)節(jié)亂飛。這個(gè)環(huán)節(jié)無法靠“調(diào)調(diào)參數(shù)”糊弄過去得理解重定向的本質(zhì)。4.1 重定向的本質(zhì)是映射不是復(fù)制重定向不是簡單地把“目標(biāo)骨骼的坐標(biāo)值”抄過來而是將源動(dòng)畫的旋轉(zhuǎn)姿態(tài)映射到目標(biāo)骨骼的結(jié)構(gòu)約束上。每個(gè)骨骼的朝向、長度、層級(jí)都不同引擎要通過一套規(guī)則推算如果源角色把膝蓋抬到某個(gè)位置目標(biāo)角色腿更長膝蓋應(yīng)該抬到什么角度。這個(gè)推算規(guī)則就是重定向的核心。在UE4時(shí)代常見做法是設(shè)置骨骼的“重定向模式”Animation、Retarget、Skeleton配合骨骼重映射表。到了UE5引擎把這塊重做成了IK Rig IK Retargeter操作直觀了很多。我沒有必要教大家回去用老辦法建議直接學(xué)新版流程。4.2 IK Rig與IK Retargeter實(shí)操流程這套流程很容易寫錯(cuò)順序我做項(xiàng)目時(shí)總結(jié)了一個(gè)固定套路打開目標(biāo)角色的骨架資產(chǎn)選擇“創(chuàng)建IK綁定”在IK綁定里把關(guān)鍵骨骼標(biāo)記出來根骨骼、骨盆、脊柱末端、左右手臂鏈、左右腿鏈。這里必須逐根指定骨骼的位置和朝向給每條鏈設(shè)置“目標(biāo)”也就是IK目標(biāo)骨骼。腿部鏈目標(biāo)一般是腳踝的IK目標(biāo)手臂鏈目標(biāo)是手部的IK目標(biāo)。這一步做的其實(shí)是“告訴引擎這套骨架里腳、手、頭在哪怎么轉(zhuǎn)”創(chuàng)建IK重定向器IK Retargeter在面板里選擇源“IK綁定”為一個(gè)參考骨架目標(biāo)“IK綁定”為當(dāng)前骨架在重定向器的“重定向姿勢”部分做手動(dòng)校準(zhǔn)尤其是不同體型差異大的角色需要在Retarget Pose里調(diào)整各骨骼鏈的偏移和朝向讓一幀基礎(chǔ)姿勢對齊校準(zhǔn)完成后就可以拖入源動(dòng)畫資產(chǎn)到重定向器或者批量選擇多個(gè)動(dòng)畫資產(chǎn)執(zhí)行重定向預(yù)覽確認(rèn)效果后導(dǎo)出為目標(biāo)骨架下的新動(dòng)畫資產(chǎn)。4.3 重定向常踩的坑手指、腳踝和根骨位移重定向做出來時(shí)效果看起來還可以但只要一細(xì)看就問題不斷。最常見的幾個(gè)坑手指亂甩目標(biāo)骨架手指骨骼數(shù)和源骨架不一致映射時(shí)多一根少一根手部就會(huì)抽搐。已經(jīng)映射了仍亂動(dòng)就要在重定向器里關(guān)閉手指鏈的映射用手部整體旋轉(zhuǎn)代替。腳踝翻轉(zhuǎn)源角色與目標(biāo)角色腳掌骨骼的軸向關(guān)系不同導(dǎo)致重定向后腳尖著地變成腳背著地。需要在Retarget Pose里對腳踝骨骼做局部旋轉(zhuǎn)修正重點(diǎn)看腳尖朝向。根骨位移變成原地踏步源動(dòng)畫有根骨骼位移Root Motion重定向時(shí)沒有把根骨骼鏈正確標(biāo)記。導(dǎo)致重定向后角色原地“跑步”完全不位移。解決方式是在IK Rig里確認(rèn)根骨骼鏈已包含Performed骨骼同時(shí)在重定向器參數(shù)里保留根骨骼的平移數(shù)據(jù)。還有一個(gè)容易被忽略的點(diǎn)重定向后動(dòng)畫資產(chǎn)的根骨骼縮放。目標(biāo)角色比源角色高大很多時(shí)即使骨骼比例調(diào)整過地面上看到的膝蓋高度依然不對。這時(shí)候需要在重定向器里為骨骼鏈設(shè)置額外的縮放補(bǔ)償而不是在動(dòng)畫資產(chǎn)里手調(diào)關(guān)鍵幀后者改一幀另一幀又崩了。5. 蒙太奇與程序化驅(qū)動(dòng)讓動(dòng)畫響應(yīng)玩法事件動(dòng)畫修改做到這一步基本已經(jīng)可以應(yīng)付大多數(shù)固定邏輯但玩法里真正難的是“事件驅(qū)動(dòng)的動(dòng)畫”比如玩家按下一個(gè)鍵觸發(fā)的揮砍、翻滾、處決或者根據(jù)子彈數(shù)量改變裝彈動(dòng)作。這些通常在動(dòng)畫藍(lán)圖里用蒙太奇AnimMontage和程序化手段來解決。5.1 AnimMontage的基礎(chǔ)操作AnimMontage是一個(gè)可被打斷、可跳轉(zhuǎn)、可插入通知的動(dòng)畫播放容器。它可以是多個(gè)動(dòng)畫片段的組合適合做技能連招、受擊硬直、復(fù)雜演出。創(chuàng)建方式內(nèi)容瀏覽器右鍵→動(dòng)畫→動(dòng)畫蒙太奇指定使用的骨架然后雙擊打開。把任意一個(gè)動(dòng)畫資產(chǎn)拖到蒙太奇時(shí)間軸上即可。我常用的幾個(gè)功能插槽蒙太奇必須掛在動(dòng)畫藍(lán)圖里的一個(gè)插槽Slot上才能播放。在AnimGraph里添加“插槽”節(jié)點(diǎn)蒙太奇會(huì)自動(dòng)通過插槽接管輸出。片段分區(qū)把連招動(dòng)畫分成多個(gè)Section比如“攻擊1”“攻擊2”“攻擊3”通過代碼或藍(lán)圖在這些Section之間跳轉(zhuǎn)實(shí)現(xiàn)連招打斷重排。通知蒙太奇里的通知AnimNotify是攻擊判定的理想觸發(fā)點(diǎn)。跟直接在動(dòng)畫資產(chǎn)里加通知比蒙太奇的通知可以跟著不同攻擊段變化可控性更高。實(shí)操時(shí)我習(xí)慣給“受擊蒙太奇”設(shè)置一個(gè)較短的Blend Out時(shí)間比如0.1秒否則玩家連續(xù)受擊時(shí)會(huì)看到角色“卡”在過渡里手感很差。5.2 程序化修改播放速率與動(dòng)態(tài)混合權(quán)重這部分標(biāo)題里的“動(dòng)畫修改”體現(xiàn)得最直接。經(jīng)常有需求是“根據(jù)角色當(dāng)前狀態(tài)調(diào)整動(dòng)畫播放速度”比如角色中毒減速時(shí)走路動(dòng)畫也要跟著慢下來。在動(dòng)畫藍(lán)圖EventGraph里聲明一個(gè)PlayRate變量通過角色藍(lán)圖或Ability Task實(shí)時(shí)寫入。AnimGraph里把播放動(dòng)畫的節(jié)點(diǎn)上“播放速率”引腳連接到該變量。注意如果你用了狀態(tài)機(jī)和混合空間需要在每個(gè)動(dòng)畫采樣節(jié)點(diǎn)上都接上播放速率變量而不是只在一個(gè)節(jié)點(diǎn)上接。C或藍(lán)圖驅(qū)動(dòng)蒙太奇時(shí)直接調(diào)用蒙太奇播放節(jié)點(diǎn)并在參數(shù)里指定Start Section和Play Rate。舉一個(gè)簡單的藍(lán)圖節(jié)點(diǎn)鏈?zhǔn)录_始 → Play Montage蒙太奇ABP_Melee_ComboSectionAttack_1PlayRate1.0 事件中斷 → Stop Montage蒙太奇同上BlendOut0.2 事件連擊 → Montage Jump to SectionSectionAttack_2除了播放速率程序化還能控制混合權(quán)重。比如角色從站立到進(jìn)入“瞄準(zhǔn)”狀態(tài)可以把瞄準(zhǔn)動(dòng)畫的權(quán)重從0平滑增加到1。這個(gè)權(quán)重可以直接定義為動(dòng)畫藍(lán)圖中的一個(gè)變量由角色藍(lán)圖根據(jù)輸入實(shí)時(shí)更新。權(quán)重變化曲線如果想讓美術(shù)調(diào)起來直觀就暴露為曲線資產(chǎn)如果需要程序精確控制就在藍(lán)圖里用時(shí)間軸節(jié)點(diǎn)插值控制得更細(xì)。5.3 蒙太奇配合通知交互把動(dòng)畫和玩法掛鉤蒙太奇的價(jià)值有一半在通知上。攻擊判定、腳步音效、刀光特效、攝像機(jī)抖動(dòng)都可以通過動(dòng)畫通知掛在蒙太奇時(shí)間軸上。修改動(dòng)畫時(shí)這些通知經(jīng)常比關(guān)鍵幀更重要——因?yàn)樗麄冊隍?qū)動(dòng)玩法反饋。一個(gè)小經(jīng)驗(yàn)攻擊判定通知不要放在動(dòng)畫的第1幀放在“刀鋒達(dá)到最大速度”的那一幀。具體是哪一幀可以反復(fù)切換播放速度預(yù)覽。我一般會(huì)先放一個(gè)臨時(shí)通知播放動(dòng)畫觀察特效和判定時(shí)機(jī)然后精確挪動(dòng)通知位置。省時(shí)間的方法是直接在時(shí)間軸上拖動(dòng)通知邊拉邊播放幀差控制在±2幀內(nèi)。6. 常見問題排查與避坑清單最后這part是這些年我被問得最多的問題匯總。很多人做好了動(dòng)畫藍(lán)圖但運(yùn)行起來還是各種詭異我按排查優(yōu)先級(jí)列出來。6.1 動(dòng)畫不播放、播放錯(cuò)誤的第一排查路徑動(dòng)畫不播放時(shí)我建議按這個(gè)順序排查確認(rèn)動(dòng)畫藍(lán)圖已掛到角色藍(lán)圖里角色的網(wǎng)格體組件中Animation該選擇“動(dòng)畫藍(lán)圖”而非“動(dòng)畫資產(chǎn)”確認(rèn)骨架匹配角色骨骼、動(dòng)畫資產(chǎn)骨架、動(dòng)畫藍(lán)圖骨架三者之間必須一致檢查狀態(tài)機(jī)是否處于激活狀態(tài)AnimGraph有沒有把輸出節(jié)點(diǎn)連出狀態(tài)機(jī)節(jié)點(diǎn)有沒有被拖出來作為最終姿勢檢查播放條件Transition Rule里引用的變量是否被初始化比如角色速度初值是否為0檢查動(dòng)畫資產(chǎn)是否設(shè)置了Loop非循環(huán)動(dòng)畫播放一遍就靜止“單獨(dú)占住”容易讓狀態(tài)機(jī)覺得“還在播放中”。6.2 動(dòng)畫抖動(dòng)、滑步、錯(cuò)位的典型問題速查現(xiàn)象常見原因解決方法角色滑步不匹配動(dòng)畫根位移與移動(dòng)速度不一致讓移動(dòng)組件速度匹配動(dòng)畫Run Speed或開啟Root Motion切換動(dòng)畫突然抽搐過渡時(shí)間太短且姿勢差異大增加過渡時(shí)間或增加“過渡姿勢”狀態(tài)混合空間里姿勢扭曲樣本動(dòng)畫骨骼比例不一致確認(rèn)全部樣本來自同一套骨架重定向雙手亂甩手指/手腕骨骼映射錯(cuò)誤關(guān)閉手指鏈映射或增加手動(dòng)修正鏈蒙太奇中斷后角色硬邦邦Slot的BlendOut過長或過短根據(jù)動(dòng)作表現(xiàn)調(diào)整BlendOut通常0.1~0.3秒跑步時(shí)上半身左右晃上層疊加層權(quán)重未歸零檢查動(dòng)畫曲線與層級(jí)混合權(quán)重6.3 幾個(gè)能讓你少加班的自檢習(xí)慣動(dòng)畫修改這件事很多時(shí)候是“看著小改改著一個(gè)大坑”。我自己的習(xí)慣每次改動(dòng)動(dòng)畫資產(chǎn)前先復(fù)制一個(gè)備份版本。就算改崩了也可以一分鐘內(nèi)切回重要狀態(tài)機(jī)的過渡規(guī)則寫上注釋哪怕是給美術(shù)看也要保證半年后再打開這個(gè)藍(lán)圖能看懂邏輯每次改完關(guān)鍵幀立刻用不同的角色速度、不同視角播放預(yù)覽不要只在編輯器里看一次重定向之前先確認(rèn)目標(biāo)骨架的骨骼命名規(guī)范和源骨架一致不一致的提前做重命名表。很多重定向的詭異結(jié)果都是“同名骨骼結(jié)構(gòu)不同”導(dǎo)致的。動(dòng)畫修改不是孤立的“調(diào)動(dòng)畫”它牽連著角色移動(dòng)、事件通知、邏輯狀態(tài)。如果你剛開始做建議先別急著做重定向或動(dòng)畫層哪怕是從最簡單的FBX導(dǎo)入、狀態(tài)機(jī)、混合空間走一遍也會(huì)對整套體系有直觀認(rèn)識(shí)。這套東西做完一輪以后再拿到“幫我把這套動(dòng)畫改得XXX一點(diǎn)”的需求就能很快判斷出該動(dòng)哪一層、怎么動(dòng)、動(dòng)了會(huì)不會(huì)影響別處。