UE_C++ —— Gameplay Modules

ops/2025/2/26 17:11:05/

目录

一,Module Creation

INI File Setup

二,Multiple Gameplay Modules

三,Limitations


        编译成 DLL 的游戏相关类的集合;正如引擎本身由一组模块构成一样,每个游戏也是由一个或多个游戏模块构成的;这些模块类似于引擎以前的版本中的包packages的概念,它们都是一组相关类的容器;在引擎中,由于游戏逻辑都可以通过 C++ 实现,所以模块实际上是 DLL 文件,而不再是包文件;

一,Module Creation

        游戏模块至少要包含一个头文件 (.h)、一个 C++ 文件 (.cpp) 和一个编译文件 (*.Build.cs);

        头文件必须位于模块目录的 Public 文件夹中,如 [GameName] \Source\ [ModuleName]\Public 目录;该文件包含了编译该模块中的类所需的所有头文件 - 包括模块自动生成的头文件;

#include "Engine.h"
#include "EnginePrivate.h"
#include "<ModuleName>Classes.h"

        C++ 文件必须位于模块目录的 Private 文件夹中,也就是 [GameName]\Source\[ModuleName]\Private 目录,用于注册及实现模块;

注,至少要使用 IMPLEMENT_PRIMARY_GAME_MODULE 注册一个模块,其他模块可以使用另一个可选的 IMPLEMENT_GAME_MODULE 方法进行注册;

// Include our game's header file
#include "<ModuleName>.h"// Designate the module as primary
IMPLEMENT_PRIMARY_GAME_MODULE(<ModuleName>, "<GameName>");

        编译文件位于游戏模块的根目录中,如目录 [GameName]\Source\[ModuleName],它定义了 UnrealBuildTool 编译该模块时要使用的一些信息;

using UnrealBuildTool;public class <ModuleName> : ModuleRules
{public <ModuleName>(TargetInfo Target){PublicDependencyModuleNames.AddRange(new string[]{ "Core", "Engine" });PrivateDependencyModuleNames.AddRange(new string[]{ "RenderCore" });}
}

INI File Setup

由于新的游戏模块包含 UObject 代码,所以需进行一些必要的配置;

  • 需要在 DefaultEngine.ini 文件中的几个地方添加该模块:
    • [UnrealEd.EditorEngine] 部分的 EditPackages 数组;
    • [Launch] 部分;
    • [/Script/Engine.UObjectPackages] 部分的 NativePackages 数组;
[UnrealEd.EditorEngine]
+EditPackages=<ModuleName>
[Launch]
Module=<ModuleName>
[/Script/Engine.UObjectPackages]
+NativePackages=<ModuleName>

二,Multiple Gameplay Modules

        关于游戏 DLL 文件模块化处理有一些明智的做法选择;把游戏分为多个 DLL 文件会通常会得不偿失,带来很多麻烦,但这需要每个独立团队根据其需要和原则独立做出决定;使用多个游戏模块会使得链接时间更短,代码迭代速度更快; 但使用过多的模块,需要更加频繁地处理 DLL 文件导出 和/或 接口类;对于引擎和编辑器代码来说,做出这种妥协是正确的选择,但对于游戏代码来说,就不是很合理了;

        可创建一个主要的游戏模块,然后在创建多个额外的游戏相关的模块;可针对这些新模块创建 *.Build.cs 文件,然后把到这些模块的引用添加到游戏的 Target.cs 文件(OutExtraModuleNames 数组)中;在C++代码中,请确保游戏模块使用适当的宏;至少有一个模块必须使用 IMPLEMENT_PRIMARY_GAME_MODULE 宏,而所有其他模块应该使用 IMPLEMENT_GAME_MODULE 宏;UBT会自动发现这些模块,并编译额外的游戏DLL文件;

三,Limitations

        确实支持创建相互依赖的模块(包括模块彼此间导入和导出函数及数据 -- 比如 Engine 和 UnrealEd 模块),但是这会对编译时间造成不利影响,且有时候可能导致出现变量静态初始化相关的问题;没有相互依赖的游戏模块更难进行设计和维护,但模块的的代码可能会比较整洁;


http://www.ppmy.cn/ops/161450.html

相关文章

Python入门教程丨3.7 数据可视化

我们之前提到了一款可视化神器ECharts&#xff0c;但那是基于JS的来开发和使用的&#xff0c;现在我们有了pyecharts库&#xff0c;就可以在python中方便的调用&#xff01; 1. Pyecharts 库 1.1 什么是 Pyecharts&#xff1f; Pyecharts是 ECharts 的 Python 接口&#xff0…

LLM全栈框架完整分类清单(预训练+微调+工具链)

一、预训练框架 1. 大规模分布式训练框架 框架名称核心能力GitHub地址Megatron-LM3D并行训练、FlashAttention支持、Transformer架构优化&#xff08;NVIDIA生态&#xff09;NVIDIA/Megatron-LMDeepSpeedZeRO优化系列、3D并行、RLHF全流程支持&#xff08;微软生态&#xff09…

供应链与生产制造L1-L4级高阶流程规划框架(53页PPT)

《供应链与生产制造L1-L4级高阶流程规划框架》是一份详尽的文档&#xff0c;它详细描述了从战略规划到制造与供应链管理的整个流程。文档首先从1.0战略规划管理开始&#xff0c;涵盖了企业整体战略的制定和执行。方案还强调了流程信息化管理的重要性&#xff0c;指出通过信息化…

HTTP/HTTPS 服务端口监测的简易实现

一 HTTP/HTTPS 服务端口监测的简易实现方法 在当今快节奏的工作环境中&#xff0c;工作忙碌成为了许多职场人的常态。就拿我们团队最近经历的事情来说&#xff0c;工作任务一个接一个&#xff0c;大家都在各自的岗位上争分夺秒地忙碌着。然而&#xff0c;就在这样高强度的工作…

【Git】六、企业级开发模型

文章目录 Ⅰ. 前言Ⅱ. 系统开发环境Ⅲ. Git 分支设计规范master分支release分支develop分支feature分支hotfix分支 Ⅰ. 前言 ​ 我们知道&#xff0c;一个软件从零开始到最终交付&#xff0c;大概包括以下几个阶段&#xff1a;规划、编码、构建、测试、发布、部署和维护。 ​…

2 Text2SQL 智能报表方案介绍

0 背景 Text2SQL智能报表方案旨在通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;使用户能够以自然语言的形式提出问题&#xff0c;并自动生成相应的SQL查询&#xff0c;从而获取所需的数据报表&#xff0c;用户可根据得到结果展示分析从而为结论提供支撑&#…

OpenAI 周活用户破 4 亿,GPT-4.5 或下周发布,微软加紧扩容服务器

导语&#xff1a; OpenAI 近期用户增长迅猛&#xff0c;其下一代 AI 模型 GPT-4.5 和 GPT-5 的发布也日益临近。微软作为 OpenAI 的重要合作伙伴&#xff0c;正积极扩充服务器容量&#xff0c;为新模型的到来做好准备。 OpenAI 首席运营官布拉德莱特卡普&#xff08;Brad Lig…

使用Python爬虫获取淘宝商品详情:API返回值说明与案例指南

在电商数据分析和运营中&#xff0c;获取淘宝商品详情是常见的需求。淘宝开放平台提供了丰富的API接口&#xff0c;允许开发者通过合法的方式获取商品信息。本文将详细介绍如何使用Python编写爬虫&#xff0c;通过淘宝API获取商品详情&#xff0c;并解析API返回值的含义和结构。…