欢迎光临散文网 会员登陆 & 注册

UE探索随笔:记录一个关于蓝图继承C++类出现的诡异的BUG

2023-03-03 09:47 作者:濮之武  | 我要投稿

原文地址:https://zhuanlan.zhihu.com/p/609580942

前言

UE初学者,最近在研究UE的时候发现了一个关于初始化的诡异的BUG,在Debug的过程中发现挺少文章记录这一点的,就此描述、记录、复盘一下这个BUG。

虚幻版本:4.27 

应用插件:GAS

问题描述

这里有一个角色C++类,并派生一个蓝图类。我在C++类中声明一个组件,并在构造器中完成了初始化。现在我在关卡中生成一个蓝图类的游戏对象,诡异的事情发生了,该组件竟为空!或者再具体说,是在构造函数里组件有值,而继续执行的过程中组件便指向空!

声明组件
非常常规的创建操作

Debug过程

在构造函数结束时打断点,可以看见组件的确成功完成了创建且此时此刻组件是有值的。

但是在BeginPlay()打断点,可以看见组件指向空。

过后我在构造到BeginPlay()之间可能执行到的函数(如OnConstruction()等)均进行调试查看,结果便是在这些函数中组件也均指向空。

最终耽误了很长时间,想到这个组件是我过后在C++类中添加的,虽然成功编译完后蓝图里的确可以看到组件已经添加进去,但是会不会中间存在一些问题,因为以前也会遇到C++代码更新后蓝图出现问题的情况,这时一般需要Reparent(随便换一个父类,再重新调回去,或者直接创建一个新的蓝图类)。经过尝试,的确这又是一个需要Reparent的问题,Reparent后一切正常......

虽然蓝图已经显示加载,但组件仍是有问题的

总结

如果在C++调整代码后出现Bug,在确定代码逻辑无误后,可以考虑Reparent一下蓝图,没准问题会离奇地解决。另外,如果有大佬知道这个问题的根本原因,或对Reparent问题有更深入的认识的,十分希望赐教!(毕竟每次在蓝图配好的数据都会被刷掉是很麻烦的)

参考:forums.unrealengine.com(Debug时唯一的有用的信息)

UE探索随笔:记录一个关于蓝图继承C++类出现的诡异的BUG的评论 (共 条)

分享到微博请遵守国家法律