Unreal Engine自定义Runtime模块无法启动,StartupModule未触发
Unreal Engine自定义Runtime模块StartupModule未调用的排查方案
在Engine/Source/Runtime目录下创建了名为MyModule的自定义Runtime模块,编写了MyModule.Build.cs与MyModule.cpp文件,但启动项目时FMyModule::StartupModule()未被触发,可从以下几个方向排查:
1. 缺少模块注册宏
你的MyModule.cpp仅定义了模块类,但未将其注册到Unreal的模块管理器中,这是模块被实例化的必要步骤。需要在cpp文件末尾添加注册宏:
IMPLEMENT_MODULE(FMyModule, MyModule) #undef LOCTEXT_NAMESPACE
没有这个宏,Unreal无法识别并加载你的模块类,自然不会调用StartupModule。
2. 确认模块是否被项目依赖
Runtime目录下的模块不会默认被所有项目自动加载,必须在目标项目的.Build.cs中显式添加依赖:
PublicDependencyModuleNames.AddRange(new string[] { "MyModule" });
如果需要让该模块被所有引擎项目默认加载,可修改Engine/Source/Runtime/Engine/Engine.Build.cs,将MyModule添加到其依赖列表中,但更推荐项目按需添加依赖。
3. 检查模块加载类型配置
在MyModule.Build.cs中明确指定模块类型与自动激活属性,确保模块被正确标记为自动加载的Runtime模块:
Type = ModuleType.Runtime; bAutoActivate = true;
默认情况下Runtime模块的bAutoActivate为true,但显式声明可避免潜在的配置异常。
4. 验证模块编译状态
查看编译输出日志,确认MyModule是否成功编译。如果编译过程中出现错误,模块不会被打包到引擎或项目中,自然无法加载。可尝试以下操作:
- 重新生成项目文件(右键.uproject选择Generate Visual Studio Files)
- 清理编译缓存(删除Binaries、Intermediate文件夹)
- 重新编译整个项目或引擎
5. 检查命名一致性
确保以下命名完全一致(Unreal对大小写敏感,跨平台开发时需特别注意):
- 模块文件夹名称:
MyModule - MyModule.Build.cs中的类名:
MyModule - IMPLEMENT_MODULE宏中的第二个参数:
MyModule - LOCTEXT_NAMESPACE定义的名称:
MyModule
内容的提问来源于stack exchange,提问作者LZB
相关产品推荐
相关产品推荐

