UE4/5C++之SubSystem的了解与创建

article/2025/8/18 11:17:10

目录

了解生命周期

为什么用他,简单讲解?

SubSystems创建和使用

创建SubSystems中的UGamelnstanceSubsystem类:

写基本的3个函数:

在蓝图中的样子:

创建SubSystems中的UEditorSubsystem类:


SubSystem是什么就不多说了,可以看看大钊的相关文章:

《InsideUE4》GamePlay架构(十一)Subsystems - 知乎 (zhihu.com)

这篇文章很好的讲解了关于SubSystems的相关内容,我也就讲讲应该需要知道的重点和怎么做:

了解生命周期

第一步是了解SubSystems中提供框架中的5个生命周期:
UEngineSubsystem

代表引擎,数量1。Editor或Runtime模式都是全局唯—,从进程启动开始创建,进程退出时销毁。
UEditorSubsystem

代表编辑器,数量为1。顾名思义,只在编辑器下存在且全局唯—,从编辑器启动开始创建,到编辑器退出时销毁。
UGamelnstanceSubsystem

代表—场游戏,数量1。从游戏的启动开始创建,游戏退出时销毁。这里的—场游戏指的是Runtimea或PIE模式的运行的都算,—场游戏里可能会创建多个World【或者叫Level】切换。
UWorldSubsystem
代表—个世界,数量可能>1。其生命周期跟归属的World【或者叫Level】有关
代表本地玩家,数量可能>1。UE支持本地分屏多玩家类型的游戏,但往往最常见的是就只有一个。LocalPlayer虽然往往跟Playercontroller—
ULocalPlayerSubsystem
起访问,但是其生命周期其实是跟UGamelnstance—起的(默认—开始的时候就创建好—定数量的本地玩家),或者更准确的说是跟LocalPlayer的具体数量挂钩(当然你也可以运行时动态调用AddLocalPlayer)。

为什么用他,简单讲解?

不仅仅是因为其中的5个生命周期,更是因为其的可移植性强,并且可以解放你的双手,无需时时刻刻考虑内存问题:类似于在哪里new和在哪里delete的问题。

避免某个如pawn类,gameinstance类过于臃肿。

方便团队合作不同模块,方便不同插件的引用。

更好的封装,避免了数据污染。

甚至可以最为简单粗暴的将里面的内容复制粘贴到其他项目中。

SubSystems创建和使用

那么在了解了生命周期之后,想必如果想要做一个计分系统之类的东西,大家都应该知道要在哪个生命周期制作了把。

这里我就做继承于UGamelnstanceSubsystem的类了。

创建SubSystems中的UGamelnstanceSubsystem类:

正常c++创建搜索:

这个命名其实可以取各个不同的系统,因为它的可移植性,所以这个系统模块是很好让其他人进行分工合作的,比如计分系统写一个这个,血量系统写一个这个。

然后我们可以看见这个空空如也的类。

 对此我们需要写3个函数。

写基本的3个函数:

 

头文件:

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "LJGameInstanceSubsystem.generated.h"/*** */
UCLASS()
class UEDSTUDY_API ULJGameInstanceSubsystem : public UGameInstanceSubsystem
{GENERATED_BODY()
public://是否创建这个子系统virtual bool ShouldCreateSubsystem(UObject* Outer) const;//初始化virtual void Initialize(FSubsystemCollectionBase& Collection);//销毁virtual void Deinitialize();
};

cpp文件:

// Fill out your copyright notice in the Description page of Project Settings.#include "LJGameInstanceSubsystem.h"bool ULJGameInstanceSubsystem::ShouldCreateSubsystem(UObject* Outer) const
{Super::ShouldCreateSubsystem(Outer);return true;
}void ULJGameInstanceSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{//可以对一些资源进行初始化Super::Initialize(Collection);
}void ULJGameInstanceSubsystem::Deinitialize()
{//这里对资源进行卸载Super::Deinitialize();
}

 然后我们在创建一个简单的变量,和一个函数。

在蓝图中的样子:

然后在蓝图中可以看见:

如果想要在蓝图中创建,就需要加一些东西:

详情可以看这个:

UE4/5关于c++中的actor组件无法创建蓝图类的解决方法_多方通行8的博客-CSDN博客

UE4/5C++之关于UCLASS()的说明符和元数据修饰符_多方通行8的博客-CSDN博客

然后就可以创建了:

创建SubSystems中的UEditorSubsystem类:

和之前创建UGameInstanceSubsystem一样,对此我就直接在项目中直接创建了:

然后这样:

头文件:

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "EditorSubsystem.h"
#include "LJEditorSubsystem.generated.h"/*** */
UCLASS(Blueprintable)
class UEDSTUDY_API ULJEditorSubsystem : public UEditorSubsystem
{GENERATED_BODY()
public://是否创建这个子系统virtual bool ShouldCreateSubsystem(UObject* Outer) const;//初始化virtual void Initialize(FSubsystemCollectionBase& Collection);//销毁virtual void Deinitialize();
};

cpp文件:

// Fill out your copyright notice in the Description page of Project Settings.#include "LJEditorSubsystem.h"bool ULJEditorSubsystem::ShouldCreateSubsystem(UObject* Outer) const
{Super::ShouldCreateSubsystem(Outer);return true;
}void ULJEditorSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{//可以对一些资源进行初始化Super::Initialize(Collection);
}void ULJEditorSubsystem::Deinitialize()
{//这里对资源进行卸载Super::Deinitialize();
}

创建这个之后,我们需要注意的是需要在项目的bulid.cs中输入:

"EditorSubsystem"这个模块才能编译成功【而我的UE5可以不输入这个模块就成功了,不知道是什么原因,但我还是写出来,以防止各位可能出现相关的问题】

 然后在蓝图中的这里看到:

因为都是编辑器的生命周期,所以在其他的蓝图里面只能进行cast to 某个类,而无法直接看到这个,所以我们才能在编辑器工具中看到:

不论是编辑器工具控件或者是编辑器工具蓝图都可以看见:

 

 


http://chatgpt.dhexx.cn/article/H0bLjHXO.shtml

相关文章

Ka-CHOCO国产士力架的测评

麦芽糖比例过多,巧克力占比太少,咬起来偏硬,偏甜

windows10 安装 choco

以管理员身份运行Powershell: Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1)) 已经完成安装,后面可以用choco命令安装软件了。 如,安装…

Choco安装npm

安装依赖 1.安装Chocolatey https://chocolatey.org/install 依次执行命令 Get-ExecutionPolicy Set-ExecutionPolicy Bypass -Scope Process Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServiceP…

choco--windows下的包管理工具

windows下的包管理工具,其实就类似于Linux下的各种发行版使用的软件管理工具,比如yum,apt,pacman等等 choco安装[可能需要学科网上] https://chocolatey.org/install Set-ExecutionPolicy RemoteSigned # 允许远程执行脚本 # 下…

windows下 choco 安装和配置mongoDB

1、下载mongoDB配置 点击查看此篇博客先下载choco 然后右键点击win图标: 管理员权限命令行.png 不同的win系统可以打开不同的命令行,有的是powershell有的是cmd,在下载choco之后可以直接在当前下载好的后面直接输入: choco inst…

【Windows包管理器(choco)】choco : 无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正 确,然后再试一次。

问题描述 choco : 无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正 确,然后再试一次。 所在位置 行:1 字符: 1 choco install -g consul ~~~~~ CategoryInfo : ObjectNo…

choco安装[win10包管理器]

1、前言 其实就是不用自己再去配置npm啥的这些环境了 直接一把梭哈 github地址:https://github.com/chocolatey/choco 2、win10安装 已管理员方式运行poweshell 快捷键 win x 然后 运行 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object Sy…

Choco使用小记--如何设置choco的默认软件包安装位置

写在前面 最近有时间折腾一下windows, 对其中一个软件包管理器颇感兴趣, 毕竟Linux, macos都有(apt, pacman, yum, brew etc.) 但是在Windows上使用Choco就显得没有那么方便了…一来是因为目前还没有一个合适的国内镜像, 就导致其速度一直上不去, 我开了代理之后速度有所提升,…

Choco包管理工具安装

Choco包管理工具安装 choco包的安装下载地址 choco包的安装 Choco是一款包管理工具,不过在使用之前需要安装和配置环境,依赖PowerShell相关的文件。Chocolatey允许用户使用单个命令,从命令行安装Windows程序。在整个安装过程中用户无需手动访…

choco : 无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正 确,然后再试一次。

windows powershell报错 报错截图 ** ** PS C:\WINDOWS\system32> choco install mkcert choco : 无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正 确,然后再试一次。 所…

windows安装choco

choco官方安装地址:https://chocolatey.org/install 使用window打开powershell,在终端输入安装指令即可 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::…

windows系统的包管理器【choco】

windows系统的包管理器【choco】 熟悉Linux的人都知道,Linux系统的程序安装,可以很简单(用软件包管理器安装)也可以很复杂(源码编译安装)。所以大多数情况下,咱么都是直接使用yum、apt等软件包…

Win10离线安装choco方案

Win10离线安装choco方案 问题描述前置条件,下载必须的nupkg解决办法: 离线安装choco修改install.ps1脚本修改第46行:修改第277行: install.ps1脚本powersell开启信任脚本策略以管理员powershell执行安装脚本 结果验证 问题描述 安装choco的时候,总是超时失败. 前置…

Windows使用choco包管理器

Windows使用choco包管理器 安装chocopowershell 2安装choco choco安装失败修改choco后续安装软件的默认安装路径--有bug,失败 choco包下载目录安装的常见命令行工具位置常见的命令行工具安装目录 choco常见操作搜索软件包查看指定软件的所有版本 安装软件包安装指定…

【choco 安装】chocolatey 安装步骤包管理工具

他可以帮你安装东西,不用下载环境软件,就可以使用。choco 包管理工具 官网 chocolatey 单击我下载 安装要求 Windows 7 / Windows Server 2003PowerShell v2 .NET Framework 4(如果您没有安装,则安装将尝试安装.NET 4.0&#x…

eclipse配置tomcat8.5

配置的路异常艰辛。。一定要写一篇博客记录一下! 温馨提示: 1.不要下载版本太低的eclipse,eclipse版本最好是eclipse for java EE developers,如果是for java Developers会没有sever,解决办法自行搜索。 2.最好不要下载…

tomcat8下载安装教程

在Apache官网下载Tomcat 8压缩包,在左边Download栏中选择Tomcat 8,如下图所示: 进入https://tomcat.apache.org/download-80.cgi页面,进行下载tomcat 8, 选择下载Tomcat 64-bit Windows zip,如下图所示: 解压压缩包,如下图所示: 打开解压文件夹中的bin目录 【apache-t…

tomcat8.5配置https

一、使用jdk自带的工具生成数字证书,如下: 先进入tomcat conf目录下,创建一个文件夹key 然后, keytool -genkey -v -alias tomcat -keyalg RSA -keystore C:\apache-tomcat-8.5.31\conf\key\tomcat.keystore -validity 36500 k…

Tomcat8安装

1、前置环境 Tomcat 8 对应jdk 1.8 版本;如果你的jdk版本是8以上,则安装对应的tomcat版本。 jdk8 官方下载安装时,先安装jdk版本,最后单独安装jre。所以电脑会有两套jre,一套是jdk中的jre,位于 \jre 目录下…