UE探索隨筆:記錄一個關(guān)于藍(lán)圖繼承C++類出現(xiàn)的詭異的BUG
原文地址:https://zhuanlan.zhihu.com/p/609580942

前言
UE初學(xué)者,最近在研究UE的時候發(fā)現(xiàn)了一個關(guān)于初始化的詭異的BUG,在Debug的過程中發(fā)現(xiàn)挺少文章記錄這一點(diǎn)的,就此描述、記錄、復(fù)盤一下這個BUG。
虛幻版本:4.27?
應(yīng)用插件:GAS
問題描述
這里有一個角色C++類,并派生一個藍(lán)圖類。我在C++類中聲明一個組件,并在構(gòu)造器中完成了初始化?,F(xiàn)在我在關(guān)卡中生成一個藍(lán)圖類的游戲?qū)ο螅幃惖氖虑榘l(fā)生了,該組件竟為空!或者再具體說,是在構(gòu)造函數(shù)里組件有值,而繼續(xù)執(zhí)行的過程中組件便指向空!


Debug過程
在構(gòu)造函數(shù)結(jié)束時打斷點(diǎn),可以看見組件的確成功完成了創(chuàng)建且此時此刻組件是有值的。
但是在BeginPlay()打斷點(diǎn),可以看見組件指向空。
過后我在構(gòu)造到BeginPlay()之間可能執(zhí)行到的函數(shù)(如OnConstruction()等)均進(jìn)行調(diào)試查看,結(jié)果便是在這些函數(shù)中組件也均指向空。
最終耽誤了很長時間,想到這個組件是我過后在C++類中添加的,雖然成功編譯完后藍(lán)圖里的確可以看到組件已經(jīng)添加進(jìn)去,但是會不會中間存在一些問題,因?yàn)橐郧耙矔龅紺++代碼更新后藍(lán)圖出現(xiàn)問題的情況,這時一般需要Reparent(隨便換一個父類,再重新調(diào)回去,或者直接創(chuàng)建一個新的藍(lán)圖類)。經(jīng)過嘗試,的確這又是一個需要Reparent的問題,Reparent后一切正常......

總結(jié)
如果在C++調(diào)整代碼后出現(xiàn)Bug,在確定代碼邏輯無誤后,可以考慮Reparent一下藍(lán)圖,沒準(zhǔn)問題會離奇地解決。另外,如果有大佬知道這個問題的根本原因,或?qū)eparent問題有更深入的認(rèn)識的,十分希望賜教?。ó吘姑看卧谒{(lán)圖配好的數(shù)據(jù)都會被刷掉是很麻煩的)
參考:https://forums.unrealengine.com/t/component-null-when-exposed-to-bp/137505(Debug時唯一的有用的信息)