最近开始接触Unreal Engine,首先面对的问题,就是如何在一个UE的C++项目中添加自定义模块。网上有一些不错的说明文章,但最终,我还是接连地掉进几个坑里面。于是,决定简单写几点“避坑心得”回馈社会。

避坑技巧(零),IDE从VS换成Rider,Rider提供了模块创建向导,轻松惬意。后面不用看了。

在Visual Studio环境下,我们需要手动完成以下工作:


(资料图)

在工程Source目录下,新建`<模块名>`文件夹;

在`Source/<模块名>`文件夹下,新建`Private`文件夹、`Public`文件夹和`<模块名>.`编译配置文件;

在`<模块名>.`中添加下面的内容:

在`Source/<模块名>/Public`下,新建头文件,命名为`<模块名>.h`;

在`Source/<模块名>/Private`下,新建源文件,命名为`<模块名>.cpp`;

向工程的 `<工程名>.` 和 `<工程名>` 中添加模块引用;

一个Unreal的项目默认有DebugGame、DebugGame Editor、Development、Development Editor以及Shipping,五个不同的编译目标配置;

如果编译目标是Debug Game、Development和Shipping,生效的编译文件是`<工程名>.`;

如果编译目标是Debug Game Editor和Development Editor,生效的编译文件是`<工程名>`;

因此,一般可以认为`<工程名>.`中的引用模块应该是`<工程名>`的子集。

再强调一下,2个中都必须添加这句代码:(newList<string>(){"CustomModuleName"});

在文件浏览器中右键点击`.uproject`文件,选择`Generate Visual Studio project files`;

这个操作可以认为是UBT的入口,可以重新生成.sln文件和Intermediate目录(包括其内部的.vcxproj文件)。

到这一步,我们已经可以在Binaries/目录下编译出模块对应的DLL文件了。

在`.uproject`中添加模块加载项,这样才能加载模块:

模块加载之后,模块的StartupModule函数才会被调用;

模块加载之后,在UnrealEditor中新建C++类时,才能把它指定到对应的模块中。

总结一下:

按目录规范添加文件:.、.h和.cpp;

按规范编写上面3个文件的内容;

在和中添加模块依赖;

通过uproject启动UBT重新生成vs工程;

在uproject中添加模块的启动配置。

推荐内容