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这里需要根据情况自己写。


感谢阅读,欢迎点赞、关注、收藏,有问题可在评论区交流。
如果本文对你有帮助,点击这里捐赠支持作者。

posted @ 2025-10-25 15:45  mengzhishanghun  阅读(7)  评论(0)    收藏  举报