헤드업디스플레이의 생성 과정
- 헤드업디스플레이(HUD)는 플레이어 컨트롤러에 의해 제작되고 관리되는 UI 객체
- HUD의 구현은 위젯을 생성하고 이를 플레이어 뷰포트에 띄우는 과정으로 생성
- 이렇게 만들어진 위젯은 자신을 소유한 플레이어 컨트롤러에 접근할 수 있음
플레이어 컨트롤러 -> Create Widget -> HUD Widget
HUD Widget -> Get Owning Player -> 플레이어 컨트롤러
실습
- 유저 인터페이스 - 위젯 블루 프린트 - UserWidget
- Canvas 패널
- 그 하위로 Hp Bar
- UserWidget을 상속받은 클래스 생성
- HUD 블루프린트 - 그래프 - 클래스 세팅 - 위 클래스 상속
- 플레이어 컨트롤러
- 위젯 클래스 정보
- 위젯 포인터 보관
- 초기화 때 위젯 클래스 정보 가져옴
- BeginPlay에서 위젯을 생성
- AddToViewport 로 위젯을 초기화해서 화면에 띄움
- 캐릭터 스탯 위젯 블루프린트
- Vertical Box
- 그 하위로 Horizontal Box
- 그 하위로 Text Block 다수
- 변경할 스탯은 이름 설정
- HUD 위젯에 스탯 위젯 추가
초기화 프로세스
컴포넌트 Initialize
ComponentBegin
Play액터 PostInitialize
ComponentsBegin
PlayCreate
WidgetAddTo
ViewportUI위젯 NativeOn
InitializedNative
Contsruct
- InitializeComponent에서 스탯 데이터를 초기화
- 이후 PostInitializeComponents에서 사용 가능
- BeginPlay에서 CreateWidget으로 UI위젯 초기화
- 이 때 UI위젯은 NativeOnInitialized가 호출 됨
- 실제로 보기 위해선 AddToViewport를 호출
- 내부에서 NativeContsruct
-> 최종적으로 UI 위젯 구축
실습
- 캐릭터 stat의 beginplay를 InitializeComponent로 변경
- bWantsInitializeComponent = true; 를 생성자해서 설정해줘야 호출 함
- HUD 위젯에서 NativeConstruct 오버라이드
- 캐릭터 스탯 위젯 클래스 생성
- 캐릭터 스탯 위젯 블루프린트의 부모 클래스로 지정
- 캐릭터 HUD 인터페이스 클래스 생성
- HUD 위젯
- Hp Bar 변수
- Character Stat 변수
- NativeConstruct 구현
- GetWidgetFromName 으로 멤버 변수에 할당
- GetOwningPlayerPawn 으로 폰을 가져와서 인터페이스 캐스팅
- 폰에 this를 넘겨줘서 HUD 세팅
- 위젯 업데이트 함수 (Hp Bar, 스탯)
- 캐릭터 스탯 컴포넌트
- 스탯 변경 델리게이트 추가
- set 베이스, 모디파이어 스탯에서 broadcast
- TFieldIterator 를 사용해서 반복
- StaticStruct 를 통해서 구조체 정보를 가져올 수 있음
- 속성에 대한 Key값을 가지는 FName을 가져와서 텍스트 블록 컨트롤을 얻기 위한 이름을 만들음
- GetWidgetFromName 으로 텍스트 블록을 얻어오고 Map 구조에 보관
- 업데이트 스탯
- NumericProperty에서 실제로 데이터가 들어있는 구조체의 포인터를 넘겨주면 GetValue_InContainer 함수를 통해서 해당 속성 값을 가져올 수 있음
- 얻어온 값을 SanitizeFloat와 FromString을 통해서 FText로 만들고 SetText을 통해 컨트롤의 텍스트에 할당