日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关卡 动画 蓝图 运行_动画蓝图 - Unreal Engine

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关卡 动画 蓝图 运行_动画蓝图 - Unreal Engine 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為何選擇動畫藍圖?

"動畫藍圖“聽起來比”藍圖“更高深莫測。 藍圖用起來很有意思,但現在看起來動畫藍圖和藍圖的工作原理不太一樣,所以我想在此處討論一下。

首先,讓我們談一下如何在虛幻引擎中播放動畫。

我們有兩種在SkeletalMeshComponent上播放動畫的方法。 您可能已經知道了,SkeletalMeshComponent包含了具有植皮網格物體的骨骼層次結構,可供您播放動畫。 如果您拖曳動畫到關卡中,它會創建包含SkeletalMeshComponent的SkeletalMeshActor,并為您設置一些基礎信息。

當您選擇詳細信息面板中的actor時,請您特別注意下圖所標出的這部分數據。

每個SkeletalMeshComponent都具有動畫模式設置,我們可以在其中設置我之前談到過的播放動畫的兩種方式之一。

Use Animation Asset(使用動畫資源): 它將僅被應用于AnimSequence(動畫序列)或AnimComposite(動畫組合)。 一個資源可以沿著給定的時間軸產生有效的姿勢.

Use Animation Blueprint(使用動畫藍圖): 這個模式讓您可以播放動畫藍圖。

第一個選項比較簡單,但第二個選項需要一些解釋。

第二個選項是Use Animation Blueprint(使用動畫藍圖)。

如果您從內容瀏覽器中拖曳AnimBlueprint(動畫藍圖)到關卡視口中,它將會創建如下圖顯示的具有AnimBlueprint(動畫藍圖)設置的SkeletalMeshActor。 (類似于上方的操作,您可以將動畫序列拖曳到關卡視口中)

播放一個動畫比較簡單,但播放多個動畫并基于不同的情況來混合它們 – 舉例來說,播放不同的混合動畫 – 這就比較復雜了,所以我們要使用Animation Blueprint(動畫藍圖)。 它是基于當前狀態來運行的,諸如參數和當前時間等。

如果您創建任意的動畫藍圖,您都會看到兩個圖表,在下方的鏈接中進行了詳細解釋。

它包括了兩個圖表? - EventGraph(事件圖表)和AnimGraph(動畫圖表)。

事件圖表和用于AnimInstance(動畫實例)的藍圖相同。 您可以設置變量或調用函數,并且它具有觸發的事件。 您可以通過調用每個節點來獲得執行的操作序列。

AnimGraph(動畫圖表)不太一樣。 動畫在其中進行混合。 您可以把它想象為樹形結構,而非操作序列。 每個節點都具有其各自的流程步驟,因此,它會產生姿勢。

讓我們首先看一下事件圖表示例。

在您了解藍圖后,很容易就能明白。 它會觸發這個事件、更新動畫,而且在其進行此項操作時,它會設置Speed(速度),并在計算方向后設置Direction(方向)。

那么AnimGraph(動畫圖表)是如何運作的呢? 它的運行方法不太一樣。

上圖中將會播放走路的動畫,而它會轉到Final Animation Pose(最終動畫姿勢)。 評估的順序依然是從左到右,但您更應該把每個節點視作為狀態,而非一次性的操作。 當前它只有一個循環的動畫。 為讓其能繼續后期動畫,每個節點都必須保存臨時數據。 也就是狀態值。

當您需要基于[0, 1]間的浮點值來混合兩種動畫時該如何做呢?

在我們更新動畫系統時,它將會執行以下的一系列操作。

更新EventGraph(事件圖表)

更新AnimGraph(動畫圖表)

觸發事件

我們要首先更新EventGraph(事件圖表),這是因為這樣我們可以獲得所有最新的變量,這樣AnimGraph(動畫圖表)可以使用這些值來做相應的混合。

這樣做不會變更骨骼變換的任何內容。 這個操作實際上是基于時間的變化而更新“state”(狀態)。 接下來,我們應何時變更骨骼變換并對幀生成有效姿勢? 這個操作在Evaluate(評估)時進行。

在AnimGraph(動畫圖表)中發生3個事件。

初始化

更新

評估

因為EventGraph(事件圖表)不需要評估,所以只發生2個事件。

初始化

更新

一般來說,初始化只發生一次,但如果您變更一個“needs reinitialization”(需要重新初始化)的網格物體,初始化可能會再次發生。

更新和評估在每次更新時都會發生。 評估后會產生有效姿勢。 我們為什么將這些流程分開? 主要是為了最優化。 評估流程是整個動畫處理流程中最消耗系統資源的部分,它會對變換進行大量的數學運算,而且我們可以很方便地對其進行并行計算,因為它不需要與游戲進行任何互動。 另一方面,更新流程具有“Trigger Event”(觸發事件) – 諸如AnimNotifies(動畫通知),它經常意味著會調用藍圖函數。 這樣就需要與游戲的其它部分進行互動,所以要對它并行計算就很難了。

那么能不能改變骨骼變換? 應在什么位置進行此項操作?

看起來大多數人喜歡在藍圖中進行這項操作。 可能在藍圖中進行這種操作更加順手,但正確的方法是在Animation Blueprint(動畫藍圖)中進行此項操作。

由于在動畫藍圖中會運算所有的骨骼變換并產生最終結果。 所以如果我們在同一個位置進行這些操作,這樣會更好。 如果您在藍圖中進行此操作,根據Ticks(更新)的不同順序,您可能無法獲得最新的骨骼變換。 讓我們來考慮一下:

幀起始

….

您的藍圖更新骨骼變換

動畫藍圖被調用 – 更新所有的骨骼變換

….

幀結束

這樣操作將會讓您的變更無效,因為無論您是否修改骨骼變換都不會影響到動畫藍圖。 它會運行圖表,然后相應地更新變換。 如果我們反向操作則是有效的。

幀起始

….

動畫藍圖被調用 – 更新所有的骨骼變換

您的藍圖更新骨骼變換

….

幀結束

但是考慮一下,如果現在還有另一個藍圖也需要變更該如何處理。 這樣就變得非常復雜了。

最好的辦法是把骨骼變換的操作集中在動畫藍圖中進行操作,因為一個實例包含一個動畫藍圖。 您可以使用變換節點來修改骨骼變換。

您可以設置您想要修改的變換組件,以及其所處的空間。

動畫藍圖是非常好用的工具。 它提供了許多節點 – 比如,層混合、添加型動畫混合、按變量混合、狀態、變換等等。 我們在ContentExample項目中準備了Animation.umap文件,您應該看一下。

如需了解更多信息,請點擊以下鏈接,并在下方發表您的反饋。

總結

以上是生活随笔為你收集整理的关卡 动画 蓝图 运行_动画蓝图 - Unreal Engine的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。