UE 4.27.2 和 UE 5.3.1 自定义模块出现的问题

目录

    • [UE4.27.2 和 UE5.3.1 自定义模块的区别](#UE4.27.2 和 UE5.3.1 自定义模块的区别)
    • [无法打开 uproject,无法使用 uproject 右键菜单重建 vs 项目时,怎么重建 vs 项目](#无法打开 uproject,无法使用 uproject 右键菜单重建 vs 项目时,怎么重建 vs 项目)
    • [创建 Module 需要注意的地方](#创建 Module 需要注意的地方)
    • [为什么是 Modules/ModuleManager.h](#为什么是 Modules/ModuleManager.h)
    • [为什么 UE 5.3.1 报错找不到 Modules/ModuleManager.h](#为什么 UE 5.3.1 报错找不到 Modules/ModuleManager.h)
    • 怎么验证自己的模块是对的

一开始我是看的大象无形这本书,但是做到自定义模块这里一堆错误

自定义模块的过程大概是,按照一定格式创建文件夹和文件,然后将这些文件添加到 VS 工程中

但是期间怎么做是有讲究的

UE4.27.2 和 UE5.3.1 自定义模块的区别

一开始我是想先删掉 immediate 那些文件夹,然后右键 uproject 重建 vs 工程

结果发现,我当前的是 4.27.2 的工程,但是我默认的启动器是 5.3.1 所以没有那个选项

然后我就去 5.3.1 试了一下

其实也没有区别,但是就是 VS 里面的提示可能会不一样

在 5.3.1 里面,我的 #include "Modules/ModuleManager.h" 会报错,IMPLEMENT_MODULE 也会报错

但是实际上这些都是智能提示的报错,只要自己编译成功,我觉得应该是可以忽视的......毕竟我在 4.27.2 中,这些地方也没有报错

无法打开 uproject,无法使用 uproject 右键菜单重建 vs 项目时,怎么重建 vs 项目

我在尝试的时候把 immediate 那些文件夹删了,然后之后就没办法打开 uproject 了,怪

然后从虚幻编辑器的选择界面也没办法打开

然后从 uproject 右键菜单重建 vs 项目时又提示我找不到 UBT

看上去是绝境了......

但是我搜到了别人直接调用 UBT 来生成 vs 项目的例子:

https://forums.unrealengine.com/t/generate-cpp-project-couldnt-find-unrealbuildtool/231288/15?page=3

基本上就是,找到对应版本的虚幻引擎的 UBT,运行 UnrealBuildTool.exe -projectfiles -project="path to your project\project name.uproject" -game -engine -rocket -progress

创建 Module 需要注意的地方

第一个是较新版本的 UE 中

cpp 复制代码
#include "ModuleManager.h"

要改为

cpp 复制代码
#include "Modules/ModuleManager.h"

第二个是要修改 <YourProjectName>.Target.cs<YourProjectName>Editor.Target.cs

cpp 复制代码
ExtraModuleNames.AddRange(new string[] { "<YourProjectName>"});

改为

cpp 复制代码
ExtraModuleNames.AddRange(new string[] { "<YourProjectName>", "<YourCustomModuleName>"});

第三个是 <YourProjectName>.uproject

json 复制代码
	"Modules": [
		{
			"Name": "<YourProjectName>",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		}
	],
json 复制代码
	"Modules": [
		{
			"Name": "<YourProjectName>",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		},
		{
			"Name": "<YourCustomModuleName>",
			"Type": "Runtime",
			"LoadingPhase": "Default",
			"AdditionalDependencies": [
				"Engine"
			]
		}
	],

以上讲到的 <YourProjectName> 要替换为自己的工程名,<YourCustomModuleName> 要替换为自己的模块名

为什么是 Modules/ModuleManager.h

其实你点开引擎这个 VS 项目,比如 UE5/Source/Runtime/Core/Public/Modules 是可以看到 ModuleManager.h 的

这就说明其实只是位置改了

那么这又是 Core 里面的,那么这就很清楚了,在自定义模块的 Build.cs 中设置了 PublicDependencyModuleNames 中添加了 Core,编译之后,VS 应该是会识别到你包含了 Core 这个模块,所以应该是会把 Core 的 Public 文件夹添加到你的包含目录里面的

为什么 UE 5.3.1 报错找不到 Modules/ModuleManager.h

具体来说,在 UE 4.27.2 的包含路径中,我可以找到 Source/Runtime/Core/Public/Modules

在 5.3.1 中我却找不到,他有一个 Source Directories 是有值的,这里也没有

所以这就是问题所在......我不知道是什么导致的,可能是 UBT 导致的吧

怎么验证自己的模块是对的

在 UE 工程里面新建 C++ 类的时候,如果看到自己新建的模块是可选的,那么就说明这个模块被加载了

相关推荐
yuyanjingtao37 分钟前
CCF-GESP 等级考试 2023年9月认证C++四级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
闻缺陷则喜何志丹1 小时前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie1145141911 小时前
C++ STL CookBook
开发语言·c++·stl·c++20
小林熬夜学编程1 小时前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
倔强的石头1061 小时前
【C++指南】类和对象(九):内部类
开发语言·c++
A懿轩A3 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
机器视觉知识推荐、就业指导3 小时前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香3 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Ronin3054 小时前
11.vector的介绍及模拟实现
开发语言·c++
✿ ༺ ོIT技术༻4 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++