【虚幻引擎】虚幻5.1UUserWidget不再包含OnLevelRemovedFromWorld的问题

Saturday, Apr 20, 2024 | 1 minute read | Updated at Saturday, Apr 20, 2024

@

在虚幻引擎5.1中,OnLevelRemovedFromWorld函数已被移除,导致编译错误。解决方案是重写NativeDestruct函数来实现相同的资源清理逻辑,从而成功编译。

在跟着Blaster课程项目写Menu插件的时候,在Menu.h中一直报以下错误无法编译,百思不得其解.

image-20250421115907081
image-20250421115907081

严重性代码说明项目文件33行禁止显示状态详细信息 错误C3668“UMenu::OnLevelRemovedFromWorld”: 包含重写说明符“override”的方法没有重写任何基类方法MenuSystem F:\UE\UEproject\MultiplayCourse\MenuSystem\Plugins\MultiplayerSessions\Source\MultiplayerSessions\Public\Menu.h23

image-20250421120505541
image-20250421120505541

查阅资料后发现是虚幻5.1和5.0的版本问题: 虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld.我们可以重载一个类似的函数用于达到相同的效果:

1
 virtual void NativeDestruct() override;

.cpp文件中实现:

1
2
3
4
5
void UMenu::NativeDestruct()
{
    MenuTearDown();
    Super::NativeDestruct();
}

NativeDestruct()UUserWidget(用户控件)提供的一个 关键生命周期虚函数(析构函数),用于 处理控件的销毁逻辑

  • 调用时机: 当 UUserWidget 被 ​显式移除(RemoveFromParent)​​ 或 ​其所属的 UWorld 销毁时​(如关卡切换、游戏退出),引擎会自动调用此函数。
    • 类比:类似于 Actor 的 EndPlay() 或 C++ 对象的析构函数。
  • 核心用途
    • 释放资源:清理绑定的动态委托(如按钮点击事件)、断开外部引用、销毁子控件等。
    • 防止内存泄漏:确保所有手动绑定的回调(如 UWorld 事件)被正确解绑。

替换后可正常编译与生成项目,问题解决.

© 2021 - 2026 古月月仔的博客

🌱 Powered by Hugo with theme Dream.

关于我
  • 我是古月月仔
  • Shimizu Tou||Ethan Hu
  • 分享技术学习笔记与生活感悟杂谈
  • 现居: 上海 中国
  • 家乡: 平遥 山西
日常效率工具
  • 📝Typora — Markdown极简编辑器。
  • 📓Notion — 一站式笔记工作空间。
  • 🔗N8N — 强大的节点编排工作流工具。
  • 🤖Gemini — 好用的智能 AI 助手。
  • IamgetoUrl - 快速将图片转为URL。
  • Anyconv - 多种文件格式转换在线工具。
  • PDF24 - PDF编辑操作在线工具箱。
内容与资源工具
  • Mixamo - Adobe提供的免费角色动画库。
  • Bunlock-Music - 用于解密.ncm,.qmc类音频格式的工具。
  • EasyGIT - 一款在线GIF动图制作工具。
  • Alphacoders - 海量高清壁纸和影视/游戏原图社区。
  • 哲风壁纸 -中文壁纸分享与交流社区。
  • 爱给网 - 免费音效、配乐、视频模板等海量媒体素材。
  • 模之屋 - 专注于分享各类3D模型的社区。
我的爱好
  • 🚀 喜欢折腾各种好玩的应用技术
  • 📸 业余摄影爱好者
  • 🎮 各类游戏玩家
  • 💻 数码产品折腾爱好者
  • 📚 正在阅读:《人类简史》
  • 🎬 经典重温:《爱乐之城》