StoneのBLOG

生活这种事情,从来都是自我陶醉

0%

UE4的Plugin使用

制作UE4的插件相当于给UE4引擎添加新的功能模块。UE4的功能模块组成是由Module组成的,关于Module具体是什么,中文翻译就是模块,自己的理解中可以说是文件的单位了。

新建的插件代表着跟UE4本来的功能模块不是从属于一个Module,所以需要为自己制作的插件制作一个属性为Public的公开接口以供UE4引擎调用。

什么是Module?

看了一眼这篇文章的创建时间是2018年,而2022年我又来更新了。

在创建Plugin之前,应该了解一下Module这个概念,当时的我也是赶鸭子上架,Module是什么都不太清楚。
在自己的项目中可以创建很多个Module,Plugin里面也可以创建很多个Module。至于什么时候应该用Plugin什么时候该直接在自己的项目里创建Module,这区别我在UE4的Editor扩展里面有提到过一些。

关于Module的基础概念:

偶然发现的这个文档,总结了一些,算是很珍贵的资源了。

Plugin的Public公开权限

一般一个Module中不想公开的源文件都会设置为Private权限,不允许外界的Module访问。要把权限公开,使得其他的模块能够访问的话需要以下两步。

头文件的位置

  • 头文件(.h)放到[\Source\Public]文件夹中去
  • cpp实现文件放到[\Source\Private]文件夹中去

添加Export用的宏

在类的声明中添加一个宏:<大写字母的Module名字>_API

例如:

1
2
3
4
UCLASS()
class SAYHELLO_API USayHelloFunction : public UBlueprintFunctionLibrary{
GENERATED_BODY()
}

这样一个名为SayHello的Module的class的权限就变成公开的了。

Tips:

  • 上述的SAYHELLO_API的定义文件位置在Intermediate/Build/Win64/UE4Editor/Development/SayHello/Definitions.SayHello.h。里面定义了DLLEXPORT,DLLIMPORT
  • UE会按照Module的单位生成DLL,<ModuleName>_API在自身的Module中会指定DLLEXPORT,在其他的Module中会指定DLLIMPORT。(啥意思?书上就写了这么多。。。)

参考资料:

Plugins

顺着文章名字找过来,结果发现内容跟我想象的不太一样。那么就分为两部分,上面是介绍UE4插件的使用方式。这一部分是介绍UE4中用到的插件。

这篇文章是根据AI的部分过来的。本来Mercuna是一个用来寻路导航的AI插件,试了一下效果很是不错。关于如何制作二进制插件的文章,也就是不带源码的那种。

Impostor Bake

这个插件在工程中使用过不过不太清楚是做什么的,不是我使用的部分,只是看到了。(需要整理)