SuperAPI AI 工具集

plugins-and-modules

编程与开发

查看项目

更新于 11-06 16:17

技能介绍

该技能面向虚幻引擎开发者,讲解如何创建、组织和管理插件。插件是由 .uplugin 描述文件、一个或多个 C++ 模块以及可选内容/资源组成的自包含、可移植功能包。当功能需要跨多个项目复用、需要按项目可选启用,或作为编辑器工具单独分发时,应选择插件;项目模块则编译进游戏,无法脱离项目。

主要能力包括:

  • 判断何时使用插件、何时使用项目模块;
  • 规划插件目录结构,包括 Source/ 下多个模块、Content/、Config/ 与 Resources/;
  • 编写 .uplugin 描述文件,设置 FileVersion、Version、VersionName、EnabledByDefault、CanContainContent、Modules、Plugins 等字段;
  • 选择模块类型(Runtime、Editor、Developer、UncookedOnly、ServerOnly 等)和加载阶段(Default、PreDefault、PostConfigInit、PostEngineInit 等);
  • 在模块 .cpp 中使用 IMPLEMENT_MODULE 注册模块,实现 StartupModule 与 ShutdownModule;
  • 通过 .uproject 的 Plugins 数组或编辑器插件浏览器启用插件;
  • 创建无源代码、仅含内容的插件;
  • 运行时通过 IPluginManager 和 IPlugin 查询插件状态、挂载路径与描述信息;
  • 处理插件间依赖关系;
  • 规避编辑器模块类型不匹配、依赖缺失、内容未挂载、循环依赖、加载阶段错误、配置文件未打包等常见问题。

使用方式上,开发者需按技能文档组织插件文件夹和描述文件,编写模块注册代码,并在项目或引擎层面启用插件。运行时查询可使用 IPluginManager::Get().FindPlugin、FindEnabledPlugin、GetEnabledPluginsWithContent 等方法。

适用场景包括:创建可复用的运行时系统、编辑器工具或第三方 SDK 封装;决定新代码放入项目模块还是插件;组织同时包含运行时与编辑器模块的插件;启用、禁用或声明对其他插件的依赖;排查插件或模块启动加载失败、插件内容未挂载或资源路径找不到等问题。

限制方面:引擎插件不能依赖项目插件,项目插件可以依赖引擎插件;循环依赖无法链接;编辑器专用代码必须使用 Editor 或 EditorNoCommandlet 模块类型;内容插件必须设置 CanContainContent 为 true 且资源放在 Content/ 下;设置 bExplicitlyLoaded 的插件不会自动加载,需通过 IPluginManager::MountExplicitlyLoadedPlugin 挂载;插件配置文件不会自动打包,分发前需复制到项目 Config/ 目录。