獨立動畫疊加)
開場老張上周接了個 TPS 項目,主角要一邊跑一邊換彈,還要一邊換彈一邊揮手打招呼。他頭鐵,用單個 Animator Controller 的 Base Layer 硬寫:Run 狀態(tài)里塞 Reload 又塞 Wave,轉移條件互相打架,寫到凌晨三點,最后跑起來渾身抽搐——下半身想抬腿,上半身想抬槍,單一狀態(tài)機同一時刻只能處于一個狀態(tài),兩個意圖擠在一個狀態(tài)機里,只能給你表演"鬼畜"。問題的根源是用錯了抽象:單一狀態(tài)機建模的是"角色此刻在做什么"(互斥),而"邊跑邊開槍"是兩個正交的意圖(并行)。Animator Layers 就是為并行意圖準備的機制:每一層是一臺獨立的小型狀態(tài)機,各自跑各自的,最后 Unity 在骨骼層面把各層的姿態(tài)按權重和遮罩混合成一個最終姿勢。這篇文章把這套"分身術"從概念講到混合數(shù)學,再落到工程配置與坑點。一、Animator Layers 核心概念1.1 層是什么:調音臺視角把 Animator Controller 比作一臺調音臺,Layer 就是調音臺上的獨立通道:每個通道播放自己的音源(狀態(tài)機),推子(Weight)控制該通道音量,最后混到同一個揚聲器(角色骨骼)上。Unity 默認創(chuàng)建Base Layer,權重恒為 1,放 Run、Idle、Jump 這類全身動作。后續(xù)每層有三個關鍵參數(shù):Weight(權重):0~1,該層姿態(tài)對最終骨骼姿勢的貢獻比例。Avatar Mask(遮罩)