UMG C++ BINDING

UMG C++ 바인딩 안정 조건

C++에서 UMG를 다룰 때는 포인터가 보인다고 끝나지 않는다. BindWidget 이름 일치, NativeConstruct 시점, Owning Player, 위젯 재생성, RemoveFromParent 이후 참조 상태까지 확인해야 런타임 null과 중복 바인딩을 막을 수 있다.

01

클래스 연결

Widget Blueprint의 parent class가 C++ UUserWidget 파생 클래스인지 확인한다.

부모가 다르면 BindWidget 대상이 없다
02

이름 바인딩

Designer의 widget name과 C++ UPROPERTY 이름을 정확히 맞춘다.

Is Variable 체크와 이름 변경 누락을 본다
03

생성 시점 처리

CreateWidget 이후 NativeConstruct에서 자식 위젯 포인터와 이벤트를 바인딩한다.

생성자에서 widget tree를 만지면 이르다
04

소유자 지정

Owning Player를 넣어 입력, focus, local player context가 올바르게 잡히게 한다.

split screen이나 multiplayer에서 중요하다
05

해제와 재생성

RemoveFromParent, Destruct, 재오픈 시 delegate 중복과 stale reference를 정리한다.

한 번 열었다 닫은 UI가 두 번 반응하면 중복 바인딩을 의심한다
BindWidget
이름 기반 연결 필수 widget은 이름이 틀리면 생성 실패나 null 문제가 난다.
Optional 바인딩은 의도를 명시한다
NativeConstruct
초기화 시점 자식 widget 접근과 delegate binding은 construct 이후가 안전하다.
반복 호출 가능성을 고려한다
Owning Player
입력 컨텍스트 UI focus, input mode, controller 접근을 올바른 플레이어 기준으로 맞춘다.
서버 전용 코드에서 UI를 만들지 않는다
Cleanup
중복 방지 delegate 제거와 pointer 정리로 재생성 시 부작용을 막는다.
AddDynamic 반복을 추적한다

런타임 확인

null 검사 NativeConstruct에서 필수 widget 포인터가 null인지 즉시 로그로 확인한다.
입력 전환 메뉴 열기와 닫기에서 Input Mode와 mouse cursor 상태가 복원되는지 본다.
재오픈 위젯을 여러 번 열고 닫아 클릭 이벤트가 중복 실행되지 않는지 확인한다.