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,方案三未測試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章