UE4新手之程式設計指南
C++類可以作為藍圖類的基類使用,並且這樣的話,程式設計師就可以設定基礎的遊戲類,隨後,它們由關卡設計師來進行子類和迭代處理。
虛幻引擎API引用
虛幻引擎架構
無論您使用C++、藍圖還是同時使用兩者來程式設計,底層的虛幻架構是相同的。
虛幻引擎遊戲的遊戲性
資源處理參考指南
動畫節點技術指南
動畫節點用於在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(); } } }