Contrato de interfaz de usuario entre C++ y WBP
Separando comportamiento y diseño con BindWidget
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Solo porque creas Unreal UI en C++, no es necesario eliminar por completo el Widget Blueprint. En ProjectTB, se dividió en contratos, con C++ responsable de la operación y WBP responsable del diseño y estilo.
BindWidget es un contrato de nomenclatura
UPROPERTY(meta = (BindWidgetOptional))
TObjectPtr<UTextBlock> UnitNameText;
UPROPERTY(meta = (BindWidgetOptional))
TObjectPtr<UButton> SettingsButton;
Si hay un widget con el mismo nombre y un tipo compatible en WBP, se conecta automáticamente. BindWidgetdebe existir,BindWidgetOptionalIncluso sin él, la generación de C++ no falla.
Los contratos opcionales son útiles para proyectos que modifican gradualmente la interfaz de usuario. En su lugar, debe verificar los punteros antes de usarlos en C++.
if (UnitNameText)
{
UnitNameText->SetText(Unit->GetDisplayName());
}
Evite que WBP recopile datos continuamente
Si cada tick hace que WBP encuentre el GameMode y lea la salud y el dinero, es difícil rastrear el flujo de datos. Está claro que es mejor llamar a la función de actualización del widget cuando cambia el estado de C++.
Cambiar estado de combate
↓
C++ verificado
↓
RefreshBattleState()
↓
Actualizar TextBlock vinculado
Mantenga los documentos del contrato juntos
Proyecto TBWBP_MainHUD_Contract.mdEnSelectionSwitcher, HoverUnitNameText, TimelineTextSe escriben exactamente el mismo nombre y tipo. Los trabajadores de WBP pueden saber qué widgets crear sin tener que leer todo C++.
La cuestión entre C++ y Blueprint no es cuál es mejor. Surgen problemas cuando no se especifican el nombre, el tipo, la dirección de la llamada y los widgets que no es necesario eliminar.