UE4-【蓝图】【CDO产生原因及解决方案】

Member UPROPERTY vars reset to NULL after Actor Constructor call

CDO:类默认对象(Class Default Object,简称CDO)

当我们从一个Class生成蓝图时,蓝图调用构造函数,把UPROPERTY对象赋值为默认值。

CDO现象:构造函数Create的UObject,在出了构造函数被释放掉,成了NULL。

CDO产生:

当第一次生成蓝图时,默认构造函数给UObject指定默认值,且改对象是EditAnyWhere,尤其是实例化或者Load出来的Asset对象,比如Curve或者音频。

当修改UPROPERTY的属性类型,并且在Details界面将UPROPERTY的实例化对象(默认值)Clear掉,会出现黄箭头,表示改值和CDO值不一样。

修改UPROPERTY的类型,从VisiableAnyWhere变成不可见。

启动UE4,发现对象进入构造函数,new了新的值给上面的UPROPERTY对象,但是在狗仔函数之外,该对象仍然为NULL。

产生原因:

蓝图CDO的值覆盖掉了在构造函数里的new的值。

如何解决:

1. Temporarily make the component property EditAnywhere.
2. Reload the editor and open the blueprint in question.
3. In its defaults, find the component. It would be set to None.
4. Click the yellow arrow to reset it to the default from its parent class CDO, which should be the value set in the C++ constructor.
5. Save and exit. Change EditAnywhere back to VisibleAnywhere.

解决方法链接

第一步:将UPROPERTY改成可编辑属性

第二步:重新打开Editor和蓝图

第三步:在Details找到属性对象,发现对象是None

第四步:点击黄箭头,重置改属性为蓝图CDO里的默认值,就是蓝图生成时,C++构造函数里load的Object

第五步:保存,将属性UPROPERTY改回VisiableAnywhere

第二种:

UCLASS(DefaultToInstanced)

第三种:

deleting the DDC folders (Engine/DerivedDataCache + MyGame/DerivedDataCache) and then recreating.

删除CDO的cache目录,并且重新create

方案一亲自实验可行,方案二适合自定义UObject,方案三未测试

 

你可能感兴趣的:(UE4)