그다음 캐릭터에 BeginPlay()에서 컨트롤러를 통해 CreateHUDWidget() 함수를 실행시켜준다.
이때 컨트롤러의 CreateHUDWidget함수는 존재하지않기 때문에 컨트롤러에서 함수를 만들어준다.
그다음 만들어준 HUD 클래스에서 필요한 변수와 함수를 만들어준다.
이때 변수는 TSubclassOf를 통해서 외부로부터 클래스를 가져오게 만들어준다.
이때 메인화면의 게임위젯이 필요로 하기때문에 위젯 클래스를 만들어 주고 필요한 변수와 함수를 만들어준다.
위의 그림에서 CharacterStatusWidget이라는 클래스를 필요로 하기때문에 CharacterStatusWidget클래스를 만들어 준다.
또다시 위의 그림에서 HealthBarWidget과 StaminaBarWidget이 필요로 하기때문에 각각 클래스를 만들어 준다.
이때 만들어진 위젯클래스에서 UPROPERTY에서 meta = (BindWidget)을 사용한 변수가 있는데 이는 블루프린트 위젯의 계층구조에서 존재하는 이름과 일치해야 사용할 수 있다게된다. 그래서 meta = (BindWidget)을 사용한 변수의 이름과 위젯 계층구조에 존재하는 이름을 일치시켜 준다.
그다음 Attribute를 관리해주는 PlayerState 클레스 에서 능력치에 대한 Get함수와 Delegate를 통해 콜백함수를 만들어준다. 콜백함수를 등록시킬 함수에 FOnAttributeChangeData는 헤더파일에 GameplayEffectTypes.h를 추가시켜준다.
이제 컴파일 후 실행해보면 UI가 나오고 테스트용으로 MaxHealth를 바꿔주는 액터를 만들어 준다음 액터와 상호작용하면 잘 HealthBar와 Attribute의 있는 MaxHealth가 적용되는 것을 볼 수 있다.