UE4 Custom Animation Blueprint node 自定義動畫藍圖節點
部分內容參考:https://www.cnblogs.com/corgi/p/5405453.html
本文章地址:https://www.cnblogs.com/LynnVon/p/13334523.html
當我按照文章做完之後,editor模式下完全沒問題,Standalone模式下也沒問題,就是shipping、Development打包時,報以下錯誤:Non-editor build cannot depend on non-redistributable modules。
這是由於AnimGraphNode_SkeletalControlBase.h或者說AnimGraphNode所在的AnimGraph Module是Editor Module,Editor Module是不能shipping打包的,只有Runtime Module才可以shipping打包。
解決思路是將所有自定義AnimGraphNode全部放到Editor Module,而我們的專案預設只有Runtime Module,所以得新建一個Editor Module。
1.修改.uproject檔案,新增Editor Module
"Modules": [ { "Name": "FlightSim", "Type": "Runtime", "LoadingPhase": "Default", "AdditionalDependencies": [ "Engine", "UMG", "CoreUObject" ] }, { "Name": "FlightSimEditor", "Type": "Editor", "LoadingPhase": "Default", "AdditionalDependencies": [ "Engine", "CoreUObject" ] } ]
2.在source資料夾新建FlightSimEditor資料夾
3.在FlightSimEditor資料夾新建FlightSimEditor.Build.cs、FlightSimEditor.h、FlightSimEditor.cpp檔案
FlightSimEditor.Build.cs
using UnrealBuildTool; public class FlightSimEditor : ModuleRules { public FlightSimEditor(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine","AnimGraph","BlueprintGraph","FlightSim"}); //新增AnimGraph BlueprintGraph模組,還有本專案的runtime module FlightSim } }
FlightSimEditor.h
#pragma once #include "Engine.h" #include "ModuleManager.h" #include "UnrealEd.h" class FFlightSimEditorModule:public IModuleInterface { };
FlightSimEditor.cpp
#include "FlightSimEditor.h" IMPLEMENT_GAME_MODULE(FFlightSimEditorModule,FlightSimEditor)
4.在原FlightSim資料夾中新建FlightSimEditor.Target.cs檔案
FlightSimEditor.Target.cs
using UnrealBuildTool; using System.Collections.Generic; public class FlightSimEditorTarget : TargetRules { public FlightSimEditorTarget(TargetInfo Target) : base(Target) { Type = TargetType.Editor; ExtraModuleNames.AddRange( new string[] { "FlightSim" ,"FlightSimEditor"} ); } }
5.在FlightSim.Build.cs新增AnimGraphRuntime Module
FlightSim.Build.cs
using UnrealBuildTool; public class FlightSim : ModuleRules { public FlightSim(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; bEnableExceptions = true; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Http", "Json", "JsonUtilities", "CryptoPP","OnlineSubsystemUtils", "EasyFM" , "HeadMountedDisplay","Landscape" ,"RenderCore", "AnimGraphRuntime"});//新增AnimGraphRuntime
PrivateDependencyModuleNames.AddRange(new string[] { "ImageWrapper", }); // Uncomment if you are using Slate UI PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
6.將自定義的AnimGraphNode置於FlightSimEditor Module下,在Editor時載入,Runtime時不載入(打包)
7.完成,shipping打包,ok