一开始我是看的大象无形这本书,但是做到自定义模块这里一堆错误
自定义模块的过程大概是,按照一定格式创建文件夹和文件,然后将这些文件添加到 VS 工程中
但是期间怎么做是有讲究的
一开始我是想先删掉 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 中,这些地方也没有报错
我在尝试的时候把 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
第一个是较新版本的 UE 中
#include "ModuleManager.h"
要改为
#include "Modules/ModuleManager.h"
第二个是要修改
和
ExtraModuleNames.AddRange(new string[] { "" });
改为
ExtraModuleNames.AddRange(new string[] { "" , "" });
第三个是
中
"Modules": [
{
"Name": "" ,
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
}
],
"Modules": [
{
"Name": "" ,
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
},
{
"Name": "" ,
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
}
],
以上讲到的
要替换为自己的工程名,
要替换为自己的模块名
其实你点开引擎这个 VS 项目,比如 UE5/Source/Runtime/Core/Public/Modules 是可以看到 ModuleManager.h 的
这就说明其实只是位置改了
那么这又是 Core 里面的,那么这就很清楚了,在自定义模块的 Build.cs 中设置了 PublicDependencyModuleNames
中添加了 Core,编译之后,VS 应该是会识别到你包含了 Core 这个模块,所以应该是会把 Core 的 Public 文件夹添加到你的包含目录里面的
具体来说,在 UE 4.27.2 的包含路径中,我可以找到 Source/Runtime/Core/Public/Modules
在 5.3.1 中我却找不到,他有一个 Source Directories 是有值的,这里也没有
所以这就是问题所在……我不知道是什么导致的,可能是 UBT 导致的吧
在 UE 工程里面新建 C++ 类的时候,如果看到自己新建的模块是可选的,那么就说明这个模块被加载了