部分内容参考: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