輸入模式和 TWeakObjectPtr
清楚表示 UI 輸入和 UObject 生命週期
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
當您開啟 UI 時,滑鼠可以工作,但可能會出現所有鍵盤快捷鍵被阻止的問題。 ProjectDT 的白板必須在操作 UI 時持續接收鍵盤輸入。
根據您的目的選擇輸入模式。
FInputModeGameAndUI InputMode;
InputMode.SetHideCursorDuringCapture(false);
PlayerController->SetInputMode(InputMode);
PlayerController->bShowMouseCursor = true;
FInputModeUIOnly適合關注 UI 的情況,但對於遊戲端也需要按鍵輸入的畫面來說可能太強了。 FInputModeGameAndUI將 UI 和遊戲輸入保持在一起。
注意哪個小部件也很重要。 如果 EditableTextBox 消耗擊鍵,則快捷方式可能不會傳遞到 PlayerController。
不需要長期持有的物件就是弱指針。
儘管 UI 子系統目前記住 MainWidget 和 WhiteBoard,但它不需要擁有這些物件的生命週期。
TWeakObjectPtr<UMainWidget> MainUI;
TWeakObjectPtr<UInvestigateWhiteBoard> ActiveWhiteBoard;
TObjectPtr追蹤 UObject 引用並可以影響具有強烈引用的物件的生存。 TWeakObjectPtr當物件被銷毀時就會失效,所以在使用前要檢查一下。
if (UMainWidget* Widget = MainUI.Get())
{
Widget->ShowOverlay();
}
指向前向宣告類型的弱指標的內聯 Setter 可能會導致編譯錯誤。 更安全的做法是僅將聲明保留在標頭中,並將其指派到包含該類型的整個定義的 CPP 中。
輸入模式和指標類型不是簡單的語法選擇。 這是在程式碼中表達誰將接收輸入以及誰將擁有物件生命週期的選擇。