网站添加百度地图,学生个人网页制作html源代码,在线子域名二级域名查询工具,网站制作公司多少钱目录
概念
基本使用案例
效果
步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem#xff0c;它与 GameInstance 紧密关联#xff0c;旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间#xff0c;一个 GameInstance 可以包含多个 UGa…目录
概念
基本使用案例
效果
步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem它与 GameInstance 紧密关联旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间一个 GameInstance 可以包含多个 UGameInstanceSubsystem 实例每个实例负责处理特定方面的逻辑并且可以在不同的游戏场景、关卡之间持久化地存在只要 GameInstance 本身没被销毁便于实现跨场景共享数据和功能的需求。
基本使用案例 通过一个小案例来证明UGameInstanceSubsystem 实例可以在不同关卡中持久的存在同时介绍UGameInstanceSubsystem 的简单使用。
效果 实现效果如下图所示通过UGameInstanceSubsystem 类来跨关卡共享全局变量。可以看到在第1个关卡中数值从100加到130当切换到第2个关卡后继续在140的基础上加到160。 步骤
1. 新建一个普通的C类和一个Actor类这里分别命名为“SimpleSubsystem”和“WorkActor” 2. 在“SimpleSubsystem.h”中添加如下代码。主要定义一个名为 USimpleSubsystem 的类它继承自 UGameInstanceSubsystem在该类中定义了一个名为“CurrentHealth”的变量和两个函数AddHealth、GetHealth。然后重写了父类的ShouldCreateSubsystem、Initialize、Deinitialize的方法。 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h
#include Subsystems/GameInstanceSubsystem.h#include SimpleSubsystem.generated.hUCLASS()
class STUDY_API USimpleSubsystem : public UGameInstanceSubsystem
{GENERATED_BODY()public:virtual bool ShouldCreateSubsystem(UObject* Outer) const override;virtual void Initialize(FSubsystemCollectionBase Collection) override; //在子系统初始化阶段会被调用的重要函数用于进行各种初始化操作virtual void Deinitialize() override; //在GameInstance销毁或者子系统要被卸载时被调用public:UFUNCTION(BlueprintCallable)void AddHealth(int32 InHealthToAdd);UFUNCTION(BlueprintCallable)int32 GetHealth();private:int32 CurrentHealth 100;
};
3. 在在“SimpleSubsystem.cpp”中主要实现了函数AddHealth、GetHealth 4. 在UEEditor中创建派生自“WorkActor”的蓝图类“BP_WorkActor” 打开“BP_WorkActor”在事件图表中通过调用“SimpleSubsystem”的函数AddHealth使得“SimpleSubsystem”的变量CurrentHealth的值增加 5. 新建两个关卡如下 在关卡“Map_Test”的关卡蓝图中每帧调用“SimpleSubsystem”的函数GetHealth来打印输出变量CurrentHealth的值。通过1键切换关卡到“Map_Test1” 在关卡“Map_Test1”的关卡蓝图中同样每帧调用“SimpleSubsystem”的函数GetHealth 6. 为了区分两个关卡分别在关卡“Map_Test”和“Map_Test1”中加入方块和球体 然后向两个关卡中都加入“BP_WorkActor”。 最终运行效果如文章开头所示。证明了UGameInstanceSubsystem 实例可以在不同关卡中持久的存在。