六一的部落格


关关难过关关过,前路漫漫亦灿灿。



Game Instance


说明

本节介绍游戏实例, 并验证不同关卡拥有相同游戏实例对象


GameInstance

当前有两个关卡, 其数据不互通

游戏拥有GameInstance的一个全局对象, 在整个游戏过程中存在. 我们可以在游戏实例中存放一些设置和信息. 在游戏过程中, 无论我们处在哪个关卡, 我们都能够对这些设置和信息进行读写


World

  1. 返回GameInstance
    1/** Returns the owning game instance for this world */
    2inline UGameInstance* GetGameInstance() const
    3{
    4    return OwningGameInstance;
    5}
  2. 返回指定类型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



测试不同关卡对同一个游戏实例读写

  1. 为STUGameInstance添加属性, 供其他类读写

    public

    ShootThemUp: STUGameInstance.h
    1FString TestString = "Game instance says hello!";
  2. 在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!";
    仅作测试, 故未检查指针安全
  3. 在STUGameModeBase中输出

    ShootThemUp: STUGameModeBase.cpp
    1// StartPlay
    2UE_LOG(LogTemp, Warning, TEXT("%s"), *GetWorld()->GetGameInstance<USTUGameInstance>()->TestString);

查看


移除测试代码


介绍游戏实例


Game Instance


说明

本节介绍游戏实例, 并验证不同关卡拥有相同游戏实例对象


GameInstance

当前有两个关卡, 其数据不互通

游戏拥有GameInstance的一个全局对象, 在整个游戏过程中存在. 我们可以在游戏实例中存放一些设置和信息. 在游戏过程中, 无论我们处在哪个关卡, 我们都能够对这些设置和信息进行读写


World

  1. 返回GameInstance
    1/** Returns the owning game instance for this world */
    2inline UGameInstance* GetGameInstance() const
    3{
    4    return OwningGameInstance;
    5}
  2. 返回指定类型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



测试不同关卡对同一个游戏实例读写

  1. 为STUGameInstance添加属性, 供其他类读写

    public

    ShootThemUp: STUGameInstance.h
    1FString TestString = "Game instance says hello!";
  2. 在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!";
    仅作测试, 故未检查指针安全
  3. 在STUGameModeBase中输出

    ShootThemUp: STUGameModeBase.cpp
    1// StartPlay
    2UE_LOG(LogTemp, Warning, TEXT("%s"), *GetWorld()->GetGameInstance<USTUGameInstance>()->TestString);

查看


移除测试代码