乐于分享
好东西不私藏

UE 5插件开发(一):定义插件的结构

UE 5插件开发(一):定义插件的结构

背景

        之前是做Unity的,UE接触的很少,因为工作的原因,需要基于UE做一款插件,没办法,只能赶鸭子上架,干中学了。

        在这里简单记录下自己学习、开发过程中遇到的一些问题,一是为了自己方便查阅,二也想为像我这样的新手朋友们提供一些解决方法的思路,希望能帮助到大家。

        我也不知道我能更几篇,有可能一直更下去,也有可能更完这一篇就懒得更了,暂时还是当一个系列更吧。     

        我做的插件需要在编辑器模式下做一些事,在运行时再做一些事,所以遇到的第一个问题就是插件编辑模式和运行模式下的代码分离问题。   

        我刚开始不知道,在网上找的教程的都是让创建编辑器独立窗口的插件:插件—添加—编辑器独立窗口。这样做下来到后面遇到了各种各样的问题。于是我只能求助AI,总算摸到点头绪。

插件结构

        UE中创建编辑模式和运行模式分离的插件结构应该是这样的,所以插件应该有两个模块:

Plugin ├── Runtime └── Editor

创建Runtime模块

        在UE插件开发中,模块并不是在 UE 编辑器里创建的,最简单的方法是手动创建目录 + Build.cs + Module.cpp。

        首先在UE中创建一个空白的插件;

关闭UE,打开插件所在的文件目录,可以看到插件的结构是这样的:

这里就创建好了插件的Runtime模块(空白插件默认创建的是Runtime模块,编辑器独立窗口默认创建的是Editor模块),打开插件的.uplugin文件也可以验证。

.uplugin里默认是这样的:

{"FileVersion": 3,"Version": 1,"VersionName": "1.0","FriendlyName": "MyPlugin","Description": "","Category": "Other","CreatedBy": "","CreatedByURL": "","DocsURL": "","MarketplaceURL": "","SupportURL": "","CanContainContent": true,"IsBetaVersion": false,"IsExperimentalVersion": false,"Installed": false,"Modules": [{"Name": "MyPlugin","Type": "Runtime","LoadingPhase": "Default"}]}

创建Editor模块

        接着创建Editor模块,也很简答,首先在.uplugin文件的Modules里新增一个Editor模块,name加上Editor,Type改成Editor,像这样:

{"FileVersion": 3,"Version": 1,"VersionName": "1.0","FriendlyName": "MyPlugin","Description": "","Category": "Other","CreatedBy": "","CreatedByURL": "","DocsURL": "","MarketplaceURL": "","SupportURL": "","CanContainContent": true,"IsBetaVersion": false,"IsExperimentalVersion": false,"Installed": false,"Modules": [{"Name": "MyPlugin","Type": "Runtime","LoadingPhase": "Default"},{"Name": "MyPluginEditor","Type": "Editor","LoadingPhase": "Default"}]}

然后,把Runtime模块的文件夹复制一个,修改下文件名:

  • 文件夹【MyPlugin】改成【MyPluginEditor】;
  • 文件【MyPlugin.Build.cs】改成【MyPluginEditor.Build.cs】;
  • 文件【MyPlugin.h】改成【MyPluginEditor.h】;
  • 文件【MyPlugin.cpp】改成【MyPluginEditor.cpp】;

再把这三个文件中的【MyPlugin】都改成【MyPluginEditor】。

在【MyPluginEditor.Build.cs】中加上【UnrealEd】和【CPS】模块,这个很重要。

using UnrealBuildTool;public class MyPluginEditor : ModuleRules{    public MyPluginEditor(ReadOnlyTargetRules Target) : base(Target)    {        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;        PublicDependencyModuleNames.AddRange(        new string[]        {            "Core",            "CoreUObject",            "Engine",            "UnrealEd"    //编辑器模块        });        PrivateDependencyModuleNames.AddRange(        new string[]        {            "MyPlugin"    //Editor模块依赖Runtime模块        });    }}

重新生成工程

右键【MyPluginProject.uproject】,点击【Generate Visual Studio project files】,然后双击【MyPluginProject.sln】;

插件的结构像这样就可以了,右键【MyPluginProject】—【生成】;

输出信息中没失败的就可以了;

在VS中启动UE,像这样就可以了。