欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

重构后的标题:生命周期观察:UE4中的GEngine,GEditor,GameInstance,World以及LocalPlayer

最编程 2024-01-08 15:20:36
...

摘抄自大钊的 subsystem知乎

理解这些引擎重要的内建类的生命周期机制是理解的基础。因此也请读者事先知道引擎编辑器模式、Runtime模式和PIE(Play In Editor)模式这三个的区别。编辑器模式就是你启动编辑器,Runtime模式是指你游戏打包后的运行状态,PIE模式指的是在编辑器里点击Play后的运行状态。

  1. UEngine* GEngine: 代表引擎,数量1。 Editor或Runtime模式都是全局唯一,从进程启动开始创建,进程退出时销毁。
  2. UEditorEngine* GEditor: 代表编辑器,数量1。 顾名思义,只在编辑器下存在且全局唯一,从编辑器启动开始创建,到编辑器退出时销毁。
  3. UGameInstance* GameInstance:代表一场游戏,数量1。 从游戏的启动开始创建,游戏退出时销毁。这里的一场游戏指的是Runtime或PIE模式的运行的都算,一场游戏里可能会创建多个World切换。
  4. UWorld* World:代表一个世界,数量可能>1。 对此不明白的建议读者去看我之前的GamePlay架构文章。简单来说,World和GameMode是关联的,可以包含多个Level,默认情况下OpenLevel常常会切换World。因此其生命周期,其实跟GameMode是一起的。但也请读者建议,编辑器模式下视口里的场景其实也是个World,因此EWorldType其实有多个类型:Game,Editor,PIE,EditorPreview,GamePreview等。读者需知道,编辑器下的视口场景也是个World!
  5. ULocalPlayer* LocalPlayer:代表本地玩家,数量可能>1。 UE支持本地分屏多玩家类型的游戏,但往往最常见的是就只有一个。LocalPlayer虽然往往跟PlayerController一起访问,但是其生命周期其实是跟UGameInstance一起的(默认一开始的时候就创建好一定数量的本地玩家),或者更准确的说是跟LocalPlayer的具体数量挂钩(当然你也可以运行时动态调用AddLocalPlayer)。

因此你想理解好那5个Subsystem类的生命周期,就得理解这5个Host对象的生命周期。道理很简单,Subsystem对象的创建和销毁都是在Host对象的创建和销毁的时候相应执行的。