关卡 动画 蓝图 运行_动画蓝图 - Unreal Engine
為何選擇動畫藍圖?
"動畫藍圖“聽起來比”藍圖“更高深莫測。 藍圖用起來很有意思,但現(xiàn)在看起來動畫藍圖和藍圖的工作原理不太一樣,所以我想在此處討論一下。
首先,讓我們談一下如何在虛幻引擎中播放動畫。
我們有兩種在SkeletalMeshComponent上播放動畫的方法。 您可能已經(jīng)知道了,SkeletalMeshComponent包含了具有植皮網(wǎng)格物體的骨骼層次結(jié)構(gòu),可供您播放動畫。 如果您拖曳動畫到關(guān)卡中,它會創(chuàng)建包含SkeletalMeshComponent的SkeletalMeshActor,并為您設(shè)置一些基礎(chǔ)信息。
當您選擇詳細信息面板中的actor時,請您特別注意下圖所標出的這部分數(shù)據(jù)。
每個SkeletalMeshComponent都具有動畫模式設(shè)置,我們可以在其中設(shè)置我之前談到過的播放動畫的兩種方式之一。
Use Animation Asset(使用動畫資源): 它將僅被應(yīng)用于AnimSequence(動畫序列)或AnimComposite(動畫組合)。 一個資源可以沿著給定的時間軸產(chǎn)生有效的姿勢.
Use Animation Blueprint(使用動畫藍圖): 這個模式讓您可以播放動畫藍圖。
第一個選項比較簡單,但第二個選項需要一些解釋。
第二個選項是Use Animation Blueprint(使用動畫藍圖)。
如果您從內(nèi)容瀏覽器中拖曳AnimBlueprint(動畫藍圖)到關(guān)卡視口中,它將會創(chuàng)建如下圖顯示的具有AnimBlueprint(動畫藍圖)設(shè)置的SkeletalMeshActor。 (類似于上方的操作,您可以將動畫序列拖曳到關(guān)卡視口中)
播放一個動畫比較簡單,但播放多個動畫并基于不同的情況來混合它們 – 舉例來說,播放不同的混合動畫 – 這就比較復(fù)雜了,所以我們要使用Animation Blueprint(動畫藍圖)。 它是基于當前狀態(tài)來運行的,諸如參數(shù)和當前時間等。
如果您創(chuàng)建任意的動畫藍圖,您都會看到兩個圖表,在下方的鏈接中進行了詳細解釋。
它包括了兩個圖表? - EventGraph(事件圖表)和AnimGraph(動畫圖表)。
事件圖表和用于AnimInstance(動畫實例)的藍圖相同。 您可以設(shè)置變量或調(diào)用函數(shù),并且它具有觸發(fā)的事件。 您可以通過調(diào)用每個節(jié)點來獲得執(zhí)行的操作序列。
AnimGraph(動畫圖表)不太一樣。 動畫在其中進行混合。 您可以把它想象為樹形結(jié)構(gòu),而非操作序列。 每個節(jié)點都具有其各自的流程步驟,因此,它會產(chǎn)生姿勢。
讓我們首先看一下事件圖表示例。
在您了解藍圖后,很容易就能明白。 它會觸發(fā)這個事件、更新動畫,而且在其進行此項操作時,它會設(shè)置Speed(速度),并在計算方向后設(shè)置Direction(方向)。
那么AnimGraph(動畫圖表)是如何運作的呢? 它的運行方法不太一樣。
上圖中將會播放走路的動畫,而它會轉(zhuǎn)到Final Animation Pose(最終動畫姿勢)。 評估的順序依然是從左到右,但您更應(yīng)該把每個節(jié)點視作為狀態(tài),而非一次性的操作。 當前它只有一個循環(huán)的動畫。 為讓其能繼續(xù)后期動畫,每個節(jié)點都必須保存臨時數(shù)據(jù)。 也就是狀態(tài)值。
當您需要基于[0, 1]間的浮點值來混合兩種動畫時該如何做呢?
在我們更新動畫系統(tǒng)時,它將會執(zhí)行以下的一系列操作。
更新EventGraph(事件圖表)
更新AnimGraph(動畫圖表)
觸發(fā)事件
我們要首先更新EventGraph(事件圖表),這是因為這樣我們可以獲得所有最新的變量,這樣AnimGraph(動畫圖表)可以使用這些值來做相應(yīng)的混合。
這樣做不會變更骨骼變換的任何內(nèi)容。 這個操作實際上是基于時間的變化而更新“state”(狀態(tài))。 接下來,我們應(yīng)何時變更骨骼變換并對幀生成有效姿勢? 這個操作在Evaluate(評估)時進行。
在AnimGraph(動畫圖表)中發(fā)生3個事件。
初始化
更新
評估
因為EventGraph(事件圖表)不需要評估,所以只發(fā)生2個事件。
初始化
更新
一般來說,初始化只發(fā)生一次,但如果您變更一個“needs reinitialization”(需要重新初始化)的網(wǎng)格物體,初始化可能會再次發(fā)生。
更新和評估在每次更新時都會發(fā)生。 評估后會產(chǎn)生有效姿勢。 我們?yōu)槭裁磳⑦@些流程分開? 主要是為了最優(yōu)化。 評估流程是整個動畫處理流程中最消耗系統(tǒng)資源的部分,它會對變換進行大量的數(shù)學運算,而且我們可以很方便地對其進行并行計算,因為它不需要與游戲進行任何互動。 另一方面,更新流程具有“Trigger Event”(觸發(fā)事件) – 諸如AnimNotifies(動畫通知),它經(jīng)常意味著會調(diào)用藍圖函數(shù)。 這樣就需要與游戲的其它部分進行互動,所以要對它并行計算就很難了。
那么能不能改變骨骼變換? 應(yīng)在什么位置進行此項操作?
看起來大多數(shù)人喜歡在藍圖中進行這項操作。 可能在藍圖中進行這種操作更加順手,但正確的方法是在Animation Blueprint(動畫藍圖)中進行此項操作。
由于在動畫藍圖中會運算所有的骨骼變換并產(chǎn)生最終結(jié)果。 所以如果我們在同一個位置進行這些操作,這樣會更好。 如果您在藍圖中進行此操作,根據(jù)Ticks(更新)的不同順序,您可能無法獲得最新的骨骼變換。 讓我們來考慮一下:
幀起始
….
您的藍圖更新骨骼變換
動畫藍圖被調(diào)用 – 更新所有的骨骼變換
….
幀結(jié)束
這樣操作將會讓您的變更無效,因為無論您是否修改骨骼變換都不會影響到動畫藍圖。 它會運行圖表,然后相應(yīng)地更新變換。 如果我們反向操作則是有效的。
幀起始
….
動畫藍圖被調(diào)用 – 更新所有的骨骼變換
您的藍圖更新骨骼變換
….
幀結(jié)束
但是考慮一下,如果現(xiàn)在還有另一個藍圖也需要變更該如何處理。 這樣就變得非常復(fù)雜了。
最好的辦法是把骨骼變換的操作集中在動畫藍圖中進行操作,因為一個實例包含一個動畫藍圖。 您可以使用變換節(jié)點來修改骨骼變換。
您可以設(shè)置您想要修改的變換組件,以及其所處的空間。
動畫藍圖是非常好用的工具。 它提供了許多節(jié)點 – 比如,層混合、添加型動畫混合、按變量混合、狀態(tài)、變換等等。 我們在ContentExample項目中準備了Animation.umap文件,您應(yīng)該看一下。
如需了解更多信息,請點擊以下鏈接,并在下方發(fā)表您的反饋。
總結(jié)
以上是生活随笔為你收集整理的关卡 动画 蓝图 运行_动画蓝图 - Unreal Engine的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DeOldify实现老照片上色(附直接使
- 下一篇: 转自栖息谷论坛-30岁之前成功12条黄金