UE4 C++ Widget的NativeConstruct 與 NativePreConstruct

XTG111發表於2024-03-29

建構函式

由於Widget是由UE的反射系統建立的,其生命週期由UE引擎管理,所以並不存在建構函式,UE為Widget類定義了兩個虛擬函式NativeConstruct 與 NativePreConstruct來充當建構函式的作用。而這兩個函式的呼叫都必須在Widget被例項化之後才能進行呼叫

如何在Widget中獲取角色

在藍圖節點中我們可以透過GetPlayerPawn來獲得

而在C++程式碼中,需要傳入一個UObject的實參。由於Widget是存在與使用者介面而不是遊戲邏輯。所以一般採用獲取PlayerController來獲取角色,當然如果使用的是HUD為父類就不用這麼麻煩了

	AXPlayerController* PlayerController = GetOwningPlayer<AXPlayerController>();
	if (PlayerController)
	{
		// 獲取PlayerController當前控制的Pawn
		MyPawn = Cast<AXPawn>(PlayerController->GetPawn());
	}
	if (MyPawn == nullptr)
	{
		UE_LOG(LogTemp, Warning, TEXT("No Pawn!!!!!!!"));
		return;
	}

NativeConstruct 與 NativePreConstruct的呼叫先後順序

NativePreConstruct先呼叫

當一個Widget類物件作為另外一個Widget的成員變數時,NativeConstruct 與 NativePreConstruct的呼叫順序

XDebugMenuWidget類中有XCameraDebugWidget物件
XCameraDebugWidget類中有XSpinwithNameWidget物件
可以看到會從“子類”向“父類”依次建立

相關文章