1、Subsystems:指的是这整套“子系统”框架,包含了定义的类以及运作机制。
2、SubsystemType/SubsystemClass:指向的是Subsystem的类型
3、5类Outer对象:Subsystem对象依存属于的5类Outer对象。
UEngine* GEngine;
UEditorEngine* GEditor;
UGameInstance* GameInstance;
UWorld* World;
ULocalPlayer* LocalPlayer;
4、生命周期5类:引擎已经预定义的5个让你可以由此派生的父类。
UEngineSubsystem
UEditorSubsystem
UGameInstanceSubsystem
UWorldSubsystem
ULocalPlayerSubsystem
5、Subsystems不支持网络复制
一、优点
1、自动实例化
2、托管生命周期
二、Subsystems的基本使用
//声明定义:
UCLASS()
class HELLO_API UMyEditorSubsystem : public UEditorSubsystem
UCLASS()
class HELLO_API UMyEngineSubsystem : public UEngineSubsystem
UCLASS()
class HELLO_API UMyGameInstanceSubsystem : public UGameInstanceSubsystem
UCLASS()
class HELLO_API UMyWorldSubsystem : public UWorldSubsystem
UCLASS()
class HELLO_API UMyLocalPlayerSubsystem : public ULocalPlayerSubsystem
//注:使用UEditorSubsystem需要在Build.cs里加上EditorSubsystem模块的引用,因为这是编辑器模块
if (Target.bBuildEditor) { PublicDependencyModuleNames.AddRange(new string[] { “EditorSubsystem” }); }
三、Subsystems生命周期
Subsystem对象的生命周期取决于其依存的Outer对象的生命周期,随着Outer对象的创建而创建,随着Outer对象的销毁而销毁。而选择依存哪种Outer对象,就是选择哪种Subsystem生命周期,靠的就是选择继承于哪个Subsystem基类。
一种特定类型的USubsystem子类只能创建出一个USubsystem对象,类似单件模式。
1、三种引擎模式
引擎编辑器模式
Runtime模式:游戏打包后的运行状态
PIE(Play In Editor)模式:编辑器里点击Play后的运行状态
2、五个Host对象的生命周期
(1)UEngine* GEngine: 代表引擎,数量1。Editor或Runtime模式都是全局唯一,从进程启动开始创建,进程退出时销毁。
(2)UEditorEngine* GEditor: 代表编辑器,数量1。,只在编辑器下存在且全局唯一,从编辑器启动开始创建,到编辑器退出时销毁。
(3)UGameInstance* GameInstance:代表一场游戏,数量1。 从游戏的启动开始创建,游戏退出时销毁。Runtime或PIE模式都算
(4)UWorld* World:代表一个世界,数量可能>1。编辑器下的视口场景也是个World!其生命周期,跟GameMode是一起的。
(5)其生命周期,其实跟GameMode是一起的。生命周期是跟UGameInstance一起的。