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