UI-Vertrag zwischen C++ und WBP
Trennung von Verhalten und Design mit BindWidget
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Nur weil Sie Unreal UI in C++ erstellen, besteht keine Notwendigkeit, den Widget Blueprint vollständig zu entfernen. In ProjectTB wurde es in Verträge unterteilt, wobei C++ für den Betrieb und WBP für Layout und Stil verantwortlich war.
BindWidget ist ein Namensvertrag
UPROPERTY(meta = (BindWidgetOptional))
TObjectPtr<UTextBlock> UnitNameText;
UPROPERTY(meta = (BindWidgetOptional))
TObjectPtr<UButton> SettingsButton;
Wenn in WBP ein Widget mit demselben Namen und einem kompatiblen Typ vorhanden ist, wird es automatisch verbunden. BindWidgetmuss existieren,BindWidgetOptionalAuch ohne scheitert die C++-Generierung nicht.
Optionale Verträge sind nützlich für Projekte, die die Benutzeroberfläche schrittweise ändern. Stattdessen müssen Sie Zeiger überprüfen, bevor Sie sie in C++ verwenden.
if (UnitNameText)
{
UnitNameText->SetText(Unit->GetDisplayName());
}
Verhindern Sie, dass WBP kontinuierlich Daten abfragt
Wenn jedes Häkchen dazu führt, dass WBP den GameMode findet und Gesundheit und Geld ausliest, ist es schwierig, den Datenfluss zu verfolgen. Es ist klar, dass es besser ist, die Aktualisierungsfunktion des Widgets aufzurufen, wenn sich der C++-Status ändert.
Kampfstatus ändern
↓
C++ verifiziert
↓
RefreshBattleState()
↓
Verknüpften TextBlock aktualisieren
Bewahren Sie Vertragsunterlagen zusammen auf
ProjektTBsWBP_MainHUD_Contract.mdInSelectionSwitcher, HoverUnitNameText, TimelineTextDer exakt gleiche Name und Typ werden geschrieben. WBP-Worker können wissen, welche Widgets erstellt werden müssen, ohne C++ vollständig lesen zu müssen.
Die Frage zwischen C++ und Blueprint ist nicht, was besser ist. Probleme treten auf, wenn Name, Typ, Aufrufrichtung und Widgets, die nicht entfernt werden müssen, nicht angegeben werden.