UE4-GamePlay-GameInstance

GameInstance是什么?

  • 是一个正在运行的游戏的高级别的管理对象,在游戏创建时生成,游戏实例关闭时销毁;

  • 在游戏中切换关卡,GameInstance不会销毁(切换关卡时可用GameInstance携带信息);

GameInstance能做什么?

UGameInstance里的接口大概有4类:

  • 1. 引擎的初始化加载

  • 2. Player的创建

  • 3. GameMode的重载修改

  • 4. OnlineSession的管理

GameInstance只有一个吗? 

相对于一个Game只有一个生命周期也与Game同步。

正如把网络连接也当作Player这个概念一样,我们此时也需要重新审视一下Game这个概念。什么是一个Game?对于玩家而言,Game就是从打开到关闭的这整个过程说展现的内容。但是对于开发者来说,这个概念就需要扩充一下了。假设有个引擎支持双击图标一下子开出4个窗口来让4个玩家独立运行,你能说得清这是一个Game还是4个Game在运行吗?哪一种说法都能自圆其说,但关键是哪一种概念划分能更好的让我们管理组织结构。因此针对这种情况,如果是这4个窗口一点都不互相关联,或者只是单独的共用地图资源,那么用4个Game的概念来管理就更为合适。如果这4个窗口里运行的内容,实际上只是在同一个关卡里本地对战,内存里互相直接通信,那用一个Game加上4个Player的概念就会变得更合适。所以针对这点,你可以把Game理解为就像进程一样,进程可以在同一个exe上多开,Game也可以在同一份游戏资源上开出多个运行实例;进程之间可以互相通信协作,Game的不同实例也可以互相沟通,不管是内存中直接在Engine的协调下完成,还是通过Socket通信。

因为UE的这套Editor自绘机制,还有PIE(PlayInEditor),进程里其实是可以同时有多个GameInstance的,如正在编辑的EditorWorld所属于的,和Play之后的World属于的。我想,这也就是为何UE把它叫做GameInstance而不是简单的Game的含义,其名字中就隐含了多个Instance的深意。

哪些逻辑应该放在GameInstance?

1. Worlds,Level的切换实际发生地是Engine,而GameInstance可以说是UE之神其下的唯一代言人,所以GameInstance也可以代之管理World的切换等。我们可以在GameInstance里实现各种逻辑最后调用Engine的OpenLevel等接口。 

2. Players,虽然一般来说我们直接控制Players的机会不多,都是配置好了就行。但要是到了需要的时候,GameInstance也实现了许多的接口可以让你动态的添加删除Players。 

3. UI,UE的UI是另一套World之外的系统,虽然同属于Viewport的显示之下,但是控制结构跟Actor们并不一样。所以我们常常会需要控制UI各种切换的业务逻辑,虽然在Widget的Graph里也可以写些简单的切换,但是要想复用某些切换逻辑的时候,在特定的Wdiget里就不合适了,而GameMode一方面局限于Level,另一方面又只存在于Server;PlayerController也是会切换掉的,同时又只存在于World中,所以最后比较合适的就剩下GameInstance了,以后当然有可能了可能会扩展出个UI的业务逻辑Manger类,不过那是后话了。 

4. 全局的配置,也常常需要根据平台改变一些游戏的配置,Execute一些ConsoleCommand,GameInstance也是这些命令的存放地。 

5. 游戏的额外第三方逻辑,如果你的游戏需要其他一些控制,比如自己写的网络通信、自定义的配置文件或者自己的一些程序算法,如果简单的话,GameInstance也可以一放,等复杂起来了,也可以把GameInstance当作一个模块容器,你可以在里面再扩展出来其他的子逻辑模块。当然如果是插件的话,还是在自己的插件Module里面自行管理逻辑,然后把协调工作交给GameInstance来做。

综述

而在数据层面上,我们层层上来,已经有了针对一个Player的Contoller的PlayerState,也有了针对World的GameMode的GameState,到了更全局之上,自然的GameInstance就应该存储一些全局的状态数据。所以你可以在GameInstance的成员变量中添加一些全局的状态,或者是那些想要在Level之外持续存在的对象。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值