[UE5] 이득우 Part 2. 13강 헤드업디스플레이의 구현

공부 스파이럴·2024년 1월 29일
0

헤드업디스플레이의 생성 과정

  • 헤드업디스플레이(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
Component
Begin
Play
액터PostInitialize
Components
Begin
Play
Create
Widget
AddTo
Viewport
UI위젯NativeOn
Initialized
Native
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을 통해 컨트롤의 텍스트에 할당

0개의 댓글