当前位置: 首页 > news >正文

【UE5 C++课程系列笔记】13——GameInstanceSubsystem的简单使用

目录

概念

基本使用案例

效果

步骤


概念

  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.h"UCLASS()
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 实例可以在不同关卡中持久的存在。

http://www.lryc.cn/news/510201.html

相关文章:

  • 实用工具推荐----Doxygen使用方法
  • js垃圾回收机制详细讲解
  • 【Linux/踩坑】Linux中启动eclipse或HDFS因JAVA_HOME设置报错
  • 百度千帆平台构建AI APP的基础概念梳理
  • Unity3D Huatuo技术原理剖析详解
  • 记Fastjson2的一个报ConcurrentModificationException的bug
  • 使用TimesFM 对车辆销售进行预测
  • OpenEuler 22.03 不依赖zookeeper安装 kafka 3.3.2集群
  • ubuntu 将python3.8 升级为python3.10并进行版本切换
  • 3. Kafka入门—安装与基本命令
  • 如何使用 python创建图片格式转换器
  • 命令行之巅:Linux Shell编程的至高艺术(上)
  • 【gulp】gulp 的基本使用
  • Linux 下处理 ^M 字符的最佳实践
  • 【优选算法】—复写零(双指针算法)
  • 2024国赛A问题三和四
  • asp.net 高校学生勤工俭学系统设计与实现
  • 《计算机组成及汇编语言原理》阅读笔记:p116-p120
  • C# OpenCvSharp DNN 卡证检测矫正
  • Spring Boot 中 Map 的最佳实践
  • J-LangChain - 智能链构建
  • 开源低代码平台-Microi吾码 打印引擎使用
  • 【MySQL】索引 面试题
  • 【高阶数据结构】AVL树
  • 【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
  • docker mysql5.7安装
  • HDR视频技术之十一:HEVCH.265 的 HDR 编码方案
  • 最新的强大的文生视频模型Pyramid Flow 论文阅读及复现
  • Effective C++ 条款 11:在 `operator=` 中处理“自我赋值”
  • 19、鸿蒙学习——配置HDC命令 环境变量