虛幻引擎4為程序員提供了兩套工具集,可共同使用來加速開發的工作流程。 新的游戲類、Slate和Canvas用戶接口元素以及編輯器功能可以使用C++語言來編寫,並且在使用Visual Studio 或 XCode之一編譯后可以在虛幻編輯器中反映出全部變更內容。 藍圖可視化腳本系統是一個強勁的工具,可以讓類通過連接函數區塊和屬性引用來在編輯器中進行創建。
C++類可以作為藍圖類的基類使用,並且這樣的話,程序員就可以設置基礎的游戲類,隨后,它們由關卡設計師來進行子類和迭代處理。
虛幻引擎API引用
虛幻引擎游戲的游戲性
資源處理參考指南
動畫節點技術指南
動畫節點用於在Vim 藍圖 中執行 操作,比如混合姿勢或直接操作骨骼。雖然僅提供了幾個動畫節點, 但是您可以創建自定義節點來滿足任何游戲的需要。
動畫節點剖析
動畫節點由兩部分組成:
-
一個運行時結構體,它執行真正的操作來生成輸出姿勢。
-
一個編輯器中使用的容器類,用於在圖表中處理節點的顯示效果和功能, 比如,節點標題和關聯菜單。
要想添加一個新動畫節點,就必須創建這兩個部分內容。
節點層次結構
盡管可以創建節點的層次結構,但任何在編輯器中使用的非抽象類都應該正確地包含 一個運行時節點(當進行繼承時不要添加任何額外的節點,除非父類是抽象類且沒有包含任何節點)。 請參照 UAnimGraphNode_BlendListBase
獲得示例。
運行時節點
運行時結構體繼承於 FAnimNode_Base
,負責初始化、更新及操作一個或多個 輸入姿勢來生成期望的輸出姿勢。它還聲明了節點執行期望操作所需的 任何輸入姿勢連接和屬性。
姿勢輸入
在運行時節點中,通過創建 FPoseLink
或 FComponentSpacePoseLink
類型的屬性來暴露姿勢輸入 。當在本地空間中應用姿勢時使用 FPoseLink
,比如 混合動畫。當在組件空間中應用姿勢時使用 FComponentSpacePoseLink
。 比如,應用骨架控制器。
一個節點可以具有一個單獨的姿勢輸入:
本地空間
UPROPERTY(Category=Links) FPoseLink BasePose;

組件空間
UPROPERTY(Category=Links) FComponentSpacePoseLink ComponentPose;

組件空間姿勢引腳是藍色的。
或者,節點也可以具有多個輸入,用於混合多個動畫:
UPROPERTY(Category=Links) FPoseLink Base; UPROPERTY(Category=Links) FPoseLink Additive;

屬性和數據輸入
動畫節點可以有多個屬性(比如一個alpha 或 變換數據),用於執行節點的操作 。這些屬性的聲明方式和其他屬性一樣,使用 UPROPERTY()
宏進行聲明。
UPROPERTY(Category=Settings, meta(PinShownByDefault))
mutable float Alpha;
通過使用特殊的元數據關鍵字,可以將動畫節點的屬性暴露為數據輸入,從而可以向該 節點傳入值。這允許節點的屬性使用在節點之外計算的值。 以下是可用的元數據關鍵字:
編輯器節點
編輯器類繼承於 UAnimGraphNode_Base
,負責類似於顯示節點標題或 添加關聯菜單動作這樣的事情。
在編輯器中使用的類應該包含一個您的運行時節點的實例,且該實例暴露為可編輯狀態。
UPROPERTY(Category=Settings) FAnimNode_ApplyAdditive Node;
標題
在角色編輯器內的 動畫藍圖 的圖表中顯示的動畫節點的背景顏色和標題文本, 是通過重載 GetNodeTitle()
和 GetNodeTitleColor()
函數定義的。
比如, UAnimGraphNode_ApplyAdditive
節點使用灰色背景,且顯示 "Apply Additive":
FLinearColor UAnimGraphNode_ApplyAdditive::GetNodeTitleColor() const { return FLinearColor(0.75f, 0.75f, 0.75f); } FString UAnimGraphNode_ApplyAdditive::GetNodeTitle(ENodeTitleType::Type TitleType) const { return TEXT("Apply Additive"); }
工具提示信息
在角色編輯器中,當鼠標懸停到節點上時顯示的工具提示信息,該信息是通過重載 GetTooltip()
函數定義的。
FString UAnimGraphNode_ApplyAdditive::GetTooltip() const { return TEXT("Apply additive animation to normal pose"); }
關聯菜單
每個動畫節點可以添加節點相關的選項到關聯菜單中,當您右擊角色編輯器中的圖表中的節點時會顯示該 關聯菜單。這些選項是通過 GetContextMenuActions()
函數添加的,該函數 是所有藍圖節點的成員函數。
比如, UAnimGraphNode_LayeredBoneBlend
節點添加菜單項,用於添加新的輸入或刪除現有輸入:
void UAnimGraphNode_LayeredBoneBlend::GetContextMenuActions(const FGraphNodeContextMenuBuilder& Context) const { if (!Context.bIsDebugging) { if (Context.Pin != NULL) { // we only do this for normal BlendList/BlendList by enum, BlendList by Bool doesn't support add/remove pins if (Context.Pin->Direction == EGPD_Input) { //@TODO: Only offer this option on arrayed pins Context.MenuBuilder->BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString()); { Context.MenuBuilder->AddMenuEntry(FGraphEditorCommands::Get().RemoveBlendListPin); } Context.MenuBuilder->EndSection(); } } else { Context.MenuBuilder->BeginSection("AnimNodesLayeredBoneBlend", NSLOCTEXT("A3Nodes", "LayeredBoneBlend", "Layered Bone Blend").ToString()); { Context.MenuBuilder->AddMenuEntry(FGraphEditorCommands::Get().AddBlendListPin); } Context.MenuBuilder->EndSection(); } } }