最近开始接触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中添加模块的启动配置。