UE:解决UObject蓝图缺少上下文的问题
© mengzhishanghun · 原创文章
首发于 博客园 · 禁止未经授权转载
问题简述
通常情况下,当你新建一个蓝图继承自UObejct的时候,你会发现不仅不能获取到PlayerController

也不能够创建UI,否则会报错

造成这个的原因是因为父类里没有重写GetWorld这个函数,导致蓝图编译时拿不到上下文,引发报错。
解决方案
知道问题的原因后就不难解决这个问题,只需要在父类中重写GetWorld函数即可,但是有几点需要注意
在.h中添加
virtual UWorld* GetWorld() const override;
在.cpp中添加
UWorld* UAIFlow::GetWorld() const
{
if (IsTemplate() || !GetOuter())
{
return nullptr;
}
return GetOuter()->GetWorld();
}
注意这里不能直接return,这样并不能直接解决问题,必须要这样写才可以。
这里因为我是在Actor中创建的对象,所以GetOuter直接指向那个Actor,所以我能正确拿到GetWorld,所以return这里需要根据情况自己写。
感谢阅读,欢迎点赞、关注、收藏,有问题可在评论区交流。
如果本文对你有帮助,点击这里捐赠支持作者。

浙公网安备 33010602011771号