介绍游戏实例
2023年11月24日 2024年1月11日
Game Instance
说明
本节介绍游戏实例, 并验证不同关卡拥有相同游戏实例对象
GameInstance
当前有两个关卡, 其数据不互通
游戏拥有GameInstance的一个全局对象, 在整个游戏过程中存在. 我们可以在游戏实例中存放一些设置和信息. 在游戏过程中, 无论我们处在哪个关卡, 我们都能够对这些设置和信息进行读写
World
- 返回GameInstance
1/** Returns the owning game instance for this world */ 2inline UGameInstance* GetGameInstance() const 3{ 4 return OwningGameInstance; 5}
- 返回指定类型GameInstance
1/** Returns the OwningGameInstance cast to the template type. */ 2template<class T> 3T* GetGameInstance() const 4{ 5 return Cast<T>(OwningGameInstance); 6}
创建C++类
- | |
---|---|
基类 | GameInstance |
路径 | |
名称 | STUGameInstance |
属性 | Public |
在 Content
目录下创建基于STUGameInstance的蓝图类, 命名为BP_STUGameInstance
设置游戏实例类型
Edit > Project Settings.. > Project > Maps & Modes > Game Instacne
- | |
---|---|
Game Instance Class | BP_STUGameInstance |
测试不同关卡对同一个游戏实例读写
- 为STUGameInstance添加属性, 供其他类读写
public
ShootThemUp: STUGameInstance.h
1FString TestString = "Game instance says hello!";
- 在STUMenuPlayerController中修改游戏实例内容
ShootThemUp: Menu/STUMenuPlayerController.cpp
1#include "Engine/World.h" 2#include "STUGameInstance.h" 3 4// BeginPlay 5GetWorld()->GetGameInstance<USTUGameInstance>()->TestString = "Menu player controller says hello!";
仅作测试, 故未检查指针安全 - 在STUGameModeBase中输出
ShootThemUp: STUGameModeBase.cpp
1// StartPlay 2UE_LOG(LogTemp, Warning, TEXT("%s"), *GetWorld()->GetGameInstance<USTUGameInstance>()->TestString);
查看
移除测试代码