【UE5】UObject中调用WorldSubsystem

引擎版本: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了。

猜你喜欢

转载自blog.csdn.net/qq_41487299/article/details/125163759