← SEARCHABLE ARCHIVE
Unreal Engine · 2026-07-02

Contrato de interfaz de usuario entre C++ y WBP

Separando comportamiento y diseño con BindWidget

INTERACTIVE READING MODE →

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.