UE4使用GameInstance设置全局变量(不同关卡、类之间数据传递)

本文解析了GameInstance在Unreal Engine中的核心作用,作为游戏全局数据载体,如何通过继承GameInstance创建蓝图类,实现在不同关卡间的数据共享。学习如何创建全局变量并启动GameInstance以解决关卡间数据传递的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、GameInstance是什么?

  • (UE4官方)是一个正在运行的游戏的高级别的管理对象,在游戏创建时生成,游戏实例关闭时销毁,一个游戏中可以有多个GameInstance;
  • 在游戏中切换关卡,GameInstance不会销毁(切换关卡时可用GameInstance携带信息);

二、GameInstance有什么作用?

在多关卡中来回切换,就出现了一个问题,因为当时关卡不能获取到其他关卡中的数据,所以需要一个公共的变量来进行记录所需要的数据,进行数据交互。GameInstance类就充当这个全局类来记录全局数据。

三、GameInstance的使用方式

1. 创建继承GameInstance类的蓝图类,命名为BP_Explorer_GameInstance

2.双击打开BP_Explorer_GameInstance蓝图类,在左侧创建全局变量MyActor2List

3.这样在任意关卡类、或者其他蓝图类中都能读取或者修改这个MyActor2List

 

定义其他任意变量都是一样。

4.最后,在设置里启动这个GameInstance类

 

<think>好的,我需要解释用户提供的UE5 C++代码:auto *ant = GetAntSubsystem(WorldContextObject);。用户是新手,所以要用简单易懂的中文,结构清晰,分步骤说明。 首先,分解代码结构。auto关键字用于自动型推断,这里ant变量的型由GetAntSubsystem返回的型决定。指针*ant表示这是一个指针变量。GetAntSubsystem看起来是获取某个子系统的函数,参数是WorldContextObject。需要解释这些概念:auto、指针、函数、子系统,以及WorldContextObject的作用。 接着,解释UE5中的子系统(Subsystem)。子系统是UE5的管理功能模块,根据生命周期分为不同别,比如GameInstanceSubsystem(随GameInstance存在)、WorldSubsystem(随World存在)等。GetAntSubsystem可能属于WorldSubsystem,所以需要WorldContextObject来指定当前World。 然后,参数WorldContextObject的作用是提供上下文,帮助引擎确定正确的World,特别是在多World情况下(如编辑器或网络游戏)。常见传递方式包括Actor或World指针。 最后,说明这行代码的作用:获取与当前World关联的AntSubsystem实例,存储在ant指针中,以便后续调用其方法或访问数据。可能需要检查ant是否为nullptr以确保获取成功。 注意使用正确的格式,行内公式用$...$,独立公式用$$...$$,但这里可能不需要数学公式。保持语言口语化,避免技术术语过多,用例子帮助理解,比如用获取玩家角色的子系统比。 检查是否符合系统级指令:结构清晰,分步骤,使用中文,LaTeX正确(虽然这里可能用不上)。确保解释准确,适合新手理解。</think>我来帮你逐步解析这行UE5 C++代码的含义: 1. **auto关键字** `auto`是C++的型推断关键字,编译器会自动识别右侧表达式的返回型。这里等价于写完整的名: `YourAntSubsystemType* ant = GetAntSubsystem(...);` 2. **指针符号*** 变量名前的`*`表示这是一个指针变量,用于存储内存地址。在UE中,多数游戏对象都通过指针管理。 3. **GetAntSubsystem函数** 这是UE5子系统(Subsystem)的典型获取方式。子系统是UE5的重要架构,分为三生命周期: - WorldSubsystem(随关卡世界存在) - GameInstanceSubsystem(随游戏实例存在) - EngineSubsystem(全局存在) 推测这里获取的是继承自`UWorldSubsystem`的`UAntSubsystem` 4. **WorldContextObject参数** 这是UE特有的上下文对象参数,用于: - 确定当前运行的World(尤其在PIE编辑器模式多World并存时) - 常见传递方式:传入`this`指针(如果是Actor派生)或直接传入`GetWorld()`结果 5. **典型使用场景** ```cpp // 在某个Actor派生中: void AMyCharacter::SomeFunction() { // 通过WorldContextObject获取子系统 if(auto* AntSystem = GetAntSubsystem(this)) { AntSystem->DoAntRelatedAction(); // 调用子系统功能 } } ``` 6. **为什么要用子系统?** 相比单例模式,子系统: - 有明确的生命周期管理 - 自动清理资源 - 支持蓝图访问 - 可通过`GetWorld()->GetSubsystem<UAntSubsystem>()`获取 建议通过UE5的`GEngine->GetWorldContexts()`命令查看当前活跃的World列表,理解多World场景下的上下文传递逻辑。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bricke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值