虚幻5.1UUserWidget不再包含OnLevelRemovedFromWorld的问题
在跟着Blaster课程项目写Menu插件的时候,在Menu.h中一直报以下错误无法编译,百思不得其解.
严重性代码说明项目文件33行禁止显示状态详细信息
错误C3668“UMenu::OnLevelRemovedFromWorld”: 包含重写说明符“override”的方法没有重写任何基类方法MenuSystem F:\UE\UEproject\MultiplayCourse\MenuSystem\Plugins\MultiplayerSessions\Source\MultiplayerSessions\Public\Menu.h23
查阅资料后发现是虚幻5.1和5.0的版本问题: 虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld.我们可以重载一个类似的函数用于达到相同的效果:
1 | virtual void NativeDestruct() override; |
.cpp
文件中实现:
1 | void UMenu::NativeDestruct() |
NativeDestruct()
是 UUserWidget
(用户控件)提供的一个 关键生命周期虚函数(析构函数),用于 处理控件的销毁逻辑。
- 调用时机:
当UUserWidget
被 显式移除(RemoveFromParent
) 或 其所属的UWorld
销毁时(如关卡切换、游戏退出),引擎会自动调用此函数。- 类比:类似于 Actor 的
EndPlay()
或 C++ 对象的析构函数。
- 类比:类似于 Actor 的
- 核心用途:
- 释放资源:清理绑定的动态委托(如按钮点击事件)、断开外部引用、销毁子控件等。
- 防止内存泄漏:确保所有手动绑定的回调(如
UWorld
事件)被正确解绑。
替换后可正常编译与生成项目,问题解决.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 古月月仔的博客!
评论