引擎版本:5.0.2
博主在写BUG的过程中,遇到了问题,我需要在UObject中调用WorldSubsystem。但是呢,当我在继承自UObject类的蓝图类中调用WorldSubsystem时,就会出现以下报错:
Function’Get XXXXSubsystem’ is unsafe to call from blueprints of class ‘XXXBlueprint’。
Pin ‘Context Object’ must have a connection。
这是因为在蓝图中 Get XXXSubsystem函数会自动调用UObject的GetWorld函数,但我们的UObject当前并没有被生成,是没有Outer的,所以自然没有办法获取到World的。
首先,我们需要重写GetWorld函数。
当我尝试了GEngine->GetWorld(),发现其为空之后,再翻阅许多文献之后,发现GEngine->GetWorldContexts()可以获取到当前所有的WorldContext。所以,为了确定我们需要的World,我们需要定位WorldContext。因此,我在GetWorld中添加了以下代码:
for (auto WorldContext : GEngine->GetWorldContexts())
{
if (UXXXSubsystem* TempUADS = WorldContext.World()->GetSubsystem<UXXXSubsystem>())
{
return WorldContext.World();
}
}
这样,就总能定位到具有WorldSubsystem的那个GameWorld了。