跳转到主要内容
inside-ue4 Jan 7, 2026 3 tags

GamePlay架构(3):WorldContext,GameInstance,Engine

UE4 GamePlay 架构学习笔记

cover

WorldContext

World有很多类型。比如编辑器本身就也是一个World,里面显示的游戏场景也是一个World,这两个World互相协作构成了我们的编辑体验。然后点播放的时候,引擎又可以生成新的类型World来让我们测试。简单来说,UE其实是一个平行宇宙世界观

namespace EWorldType
{
    enum Type
    {
        None,       // An untyped world
        Game,       // The game world
        Editor,     // A world being edited in the editor
        PIE,        // A Play In Editor world
        Preview,    // A preview world for an editor tool
        Inactive    // An editor world that was loaded but not currently being edited
    };
}

而UE用来管理和跟踪这些World的工具就是 WorldContext。对于独立运行的游戏,WorldContext只有唯一一个。而对于编辑器模式,则是一个WorldContext给编辑器,一个WorldContext给PIE(Play In Editor)的World。

WorldContext结构

GameInstance

GameInstance 里会保存着当前的WorldContext和其他整个游戏的信息。

因为经常有初学者会问到:我的Level切换了,变量数据就丟了,我应该把那些数据放在哪?再清晰直白一点,GameInstance就是你不管Level怎么切换,还是会一直存在的那个对象!

Engine

Engine继承结构

UEngine分化出了两个子类:UGameEngineUEditorEngine

最后实例化出来的UEngine实例用一个全局的 GEngine 变量来保存。GEngine可以说是一切开始的地方了。

GamePlayStatics

这个类比较简单,相当于一个C++的静态类,只为蓝图暴露提供了一些静态方法。在想借鉴或者是查询某个功能的实现时,此处往往会是一个入口。

总结

从结构上而言,我们已经来到了最根源的地方。GEngine 仿佛就是一棵大树的根,当我们拎起它的时候,也会带出整个游戏世界的各个对象。目前这些对象:

Object → Actor+Component → Level → World → WorldContext → GameInstance → Engine

已经足够表达UE游戏世界的各个部分。

Related Articles

继续阅读