UE4 如何将自己写的C++代码做成通用C++模块,并能够在引擎内使用

一、引言

因为很多时候,我们通过C++代码写的 Actor 或者 Character、AnimInstance等等。在本项目还好,如果我们希望这个类能够在其他项目中使用,达到通用的效果。那么简单点的方法,可以通过复制,然后修改项目名称等等。如果类过多,频繁的手动修改名称,会导致很多不可预料的事情发生。所以经过我通过官网和哔哩哔哩等平台,找到一个简便的方法,在此记录下我的学习成果。可以通用,并不修改太多代码文件的方法。

二、封装代码到模块,并引用

1.新建模块文件夹,将公用类放入到文件夹中:

2.添加模块引用,在主模块的build类(ZhangJiajie.Build)中,加上公共模块的引用。我这里是 UECpp

// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;

public class ZhangJiajie : ModuleRules
{
	public ZhangJiajie(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" ,"UECpp"});

		PrivateDependencyModuleNames.AddRange(new string[] {  });

		// Uncomment if you are using Slate UI
		// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
		
		// Uncomment if you are using online features
		// PrivateDependencyModuleNames.Add("OnlineSubsystem");

		// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
	}
}

3.在 ZhangJiajie.uproject 加入公共模块的引用

{
	"FileVersion": 3,
	"EngineAssociation": "4.25",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "ZhangJiajie",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		},
		{
			"Name": "UECpp",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		}
	],
	"Plugins": [
		{
			"Name": "NiagaraExtras",
			"Enabled": true
		}
	]
}

4.在 ZhangJiajie.Target,ZhangJiajieEditor.Target 文件中分别引用公共模块UECpp

// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;
using System.Collections.Generic;

public class ZhangJiajieTarget : TargetRules
{
	public ZhangJiajieTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V2;

		ExtraModuleNames.AddRange( new string[] { "ZhangJiajie" } );
		ExtraModuleNames.AddRange(new string[] { "UECpp" });
	}
}
// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;
using System.Collections.Generic;

public class ZhangJiajieEditorTarget : TargetRules
{
	public ZhangJiajieEditorTarget(TargetInfo Target) : base(Target)
	{
		Type = TargetType.Editor;
		DefaultBuildSettings = BuildSettingsVersion.V2;

		ExtraModuleNames.AddRange( new string[] { "ZhangJiajie" } );
		ExtraModuleNames.AddRange(new string[] { "UECpp" });
	}
}

4.删除 Intermediate 文件夹

5.重新构建代码

6.打开引擎后的展示效果如下,可以看到公共模块已经显示出来了:

猜你喜欢

转载自blog.csdn.net/qq_34970171/article/details/109329064
今日推荐