游戏功能(Game Features) 和 模块化Gameplay(Modular Gameplay) 插件可以帮助开发人员为项目创建独立功能。使用插件来构建功能有多种优势:
-
保持你的项目代码库的清洁且可读。
-
避免不相关的功能之间意外交互或依赖。在开发那些需要经常改动功能的已上线产品时,这尤为重要。
设置
以下步骤将使你的项目处于一种状态,可以在其中添加一个或多个基于插件的独立功能。首先,激活游戏功能和模块化Gameplay插件。
-
在虚幻引擎中,找到 编辑(Edit)> 插件(Plugins)。打开 插件** 窗口后,找到并启用游戏功能和模块化Gameplay插件。
你可以在 Gameplay 类别中找到游戏功能和模块化Gameplay插件。
-
在启用这些插件后,编辑器会提醒你将它重启。点击 立即重启。
-
当编辑器重启后,打开插件窗口,然后点击 添加(Add) 来启动 新的插件 窗口。
- 创建一个包含你正在构建的功能的新插件。选择 游戏功能(仅内容),然后命名这个插件。
-
使用 内容浏览器(Content Browser) 来找到插件的上级内容文件夹。确保你的插件与你的项目一同保存在
/Plugins/GameFeatures/
目录中。在我们的例子中,这个插件命名为 MyStandAloneFeature。
- 在 资产面板(Asset Panel) 中点击右键,在上下文菜单中展开 杂项(Miscellaneous),并选择 数据资产(Data Asset) 来创建一个新的 数据(Data) 资产。从类的列表中,选择
GameFeatureData
,并将新的资产命名为你的插件的名称。
当你完成这些步骤后,你的独立功能将被设置为在引擎(或编辑器)启动时加载。现在你可以开始开发功能本身,并添加可以实现该功能的 操作(Actions)。有四种可供使用的操作。
游戏功能动作
你的独立功能现在被设置为在引擎启动时加载。现在你可以开始开发这个功能,为其添加可以实现该功能的 操作。
操作 | 说明 |
---|---|
添加作弊(Add Cheats) | 操作将会扩展 作弊管理器(Cheat Manager) ,创建新的"作弊代码"或扩展现有作弊代码。作弊代码对于调试很有帮助,可以自动从发行版中删除。~ (波浪号)键可以打开控制台,你可以在运行项目时在这里输入作弊代码。 |
添加组件(Add Components) | 操作将会获取Actor子类的列表,并通过选择加入的方式将一组组件添加到子类中。这是使用游戏功能和模块化Gameplay插件的最常见方式,因为组件非常适合用来封装各种类型的行为。 |
添加数据注册表(Add Data Registry) | 操作会将一个或多个数据注册表添加到项目中。数据注册表可以用来高效存储和检索全局注册数据。 |
添加数据注册表源(Add Data Registry Source) | 操作会将一个或多个数据表添加到现有数据注册表 |
添加世界分区内容(Add World Partition Content) | 为这个功能添加世界分区内容。 |
添加操作
要添加操作,请打开你刚创建的数据资产。展开 操作(ACTIONS) 类别,显示名为 操作(Actions) 的数组。将元素添加到该数组中,并将其设置为合适的操作类型。你可以在下方小节中找到每种操作类型的进一步指导。
Pictured above is one of each type of Action. 对于任何插件,你可以添加任意多个操作。
添加作弊
"添加作弊"操作将会在游戏中注册 作弊管理器扩展(Cheat Manager Extension) 。这让开发人员可以在独立功能中创建自己的调试命令(或"作弊代码"),并让这些命令在功能生效后随时可用。
作弊管理器和作弊管理器扩展都是调试工具,因此不会在发行版中实例化。
添加组件
"添加组件"操作会遍历Actor和组件对,并尝试将每个组件的一个实例添加到配对的Actor中。你可以指定在客户端还是服务器上添加组件,还是两者都添加;默认情况下,客户端和服务器都会添加组件。
为了保证你的功能完全封装在插件中,你添加的组件将来自插件自身,而Actor类将是内置的引擎类,例如 Pawn 或项目中继承自引擎类的子类,例如常见的 MyPawn 。组件应该能处理与你的功能相关的所有程序逻辑和数据存储。
当你能最大程度降低与项目的Actor子类所需的交互保持在最低限度时,在别的项目中实现你设计的功能就会比较容易。
在添加组件操作中不支持使用基础Actor类。系统将忽略这部分的操作。相反,我们建议你找到所需组件的Actor子类的最小子集,并指定该类。如果有多个类需要接收该组件,且它们没有一个共同的父类,那么你可以设置多个添加组件操作来覆盖所有适当的基类。
要接收"添加组件"操作中的组件,你的Actor必须在 游戏框架组件管理器(Game Framework Component Manager) 中注册;通常是在其 开始播放(Begin Play) 事件中注册。方法是,获取全局游戏框架组件管理器,调用其 添加接收器(Add Receiver) 函数,将Actor作为 接收器(Receiver) 参数传入。无论激活了多少游戏功能,Actor仅需要使用 添加接收器(Add Receiver) 一次即可。要从Actor中删除与游戏功能关联的所有组件,请使用游戏框架组件管理器的 删除接收器(Remove Receiver) 函数。

在Actor的 开始播放(Begin Play) 事件中注册以便接收组件。
要接收"添加组件"操作中的组件,你的Actor必须使用 UGameFrameworkComponentManager
单例注册,并将自身传入 AddReceiver
函数。这步通常在 BeginPlay
中完成。代码如下:
if (UGameFrameworkComponentManager* ComponentManager = GetGameInstance()->GetSubsystem<UGameFrameworkComponentManager>())
{
ComponentManager->AddReceiver(this);
}
添加数据注册表
"添加数据注册表"操作可以将整个数据注册表添加到你的项目中。使用你要添加的数据注册表资产的路径来配置操作。如需了解数据注册表的更多信息,请参见数据注册表页面。
添加数据注册表源
假如要添加一个数据源并流送到数据注册表中,你需要使用"添加数据注册表源(Add Data Registry Source)"操作。你必须为每个数据源配置路径,配置将加载数据源的数据注册表的名称,以及相关的优先级和使用标记。如果游戏功能在启动时加载,则相应的标识符将填充下拉列表。如需更多信息,请参见"数据注册表"页面的数据注册表源部分。