【UE4基础】UE4 GEngine->GetWorld() == NULL

在Dedicated Server模式下,load玩Map后我想在我的C++代码中想获取GameInstance,通过

GEngine->GetWorld()->GetGameInstance()

语句获取,但是程序运行到这,出现段错误。

然后尝试获取World,

GEngine->GetWorld()

发现程序运行出现段错误,也就是说GEngine->GetWorld() == NULL。

经过一段搜索,在这篇文章(https://zhuanlan.zhihu.com/p/23167068)上得到启发:

一般就来说,对于独立运行的游戏(两种:game和server),WorldContext只有唯一个;而对于编辑器模式,则是一个WorldContext给编辑器,一个WorldContext给PIE(Play In Editor【一种模式,点击Play后运行的world】)的World。一般来说我们不需要直接操作到这个WorldContext类,引擎内部已经处理好各种World的协作。
Standlone Game:会使用UGameEngine来创建出唯一的一个GameWorld,因为也只有一个,所以为了方便起见,就直接保存了GameInstance指针。
而对于编辑器来说:Editor World其实只是用来预览,所以并不拥有OwningGameInstance,而PlayWorld里的OwningGameInstance才是间接保存了GameInstance。

所以,在我们Dedicated Server模式下,可以通过

GEngine->GetWorldContexts()[0]   获取World

GEngine->GetWorldContexts()[0].OwningGameInstance  获取GameInstance

然后在别人讨论中,又发现,有一种更简单的方式获取World,直接通过

World.h文件中的GWorld全局变量直接获取,通过上面的启发我们知道,这个World应该就是当前的World,引擎自动切换好。

通过GWorld->GetGameInstance() 获取GameInstance。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值