탑다운 시점의 RPG게임에서 몬스터의 체력은 몬스터 위에 표시된다.
로스트아크의 경우 몬스터 모델 위에 하나, 화면 전체 기준 위에 하나 해서 총 두 개가 표시된다.
이러한 체력바를 구현하기 위해 아래와 같은 구조를 만들었다.
기본적으로 모든 몬스터의 이름 및 체력 정보는 [구조체] EntityInfo 를 상속하는 데이터 테이블에 저장된다.
새로운 엔티티는 모두 BaseCharacter를 상속하는 클래스로 이루어지며, BaseCharacter의 UpdateCharacterInfo 함수는 해당하는 데이터 테이블 값을 반환하게 되어있다.
즉, BaseCharacter를 상속한 새로운 엔티티는 아래와 같이 UpdateCharacterInfo 함수를 상속하여 몬스터 정보를 반환해야한다.
UpdateCharacterInfo 함수가 정상적으로 구현되었다면, BaseCharacter에서는 이 값을 가지고 초기화 작업을 진행한다.
이 시점에 UI의 몬스터 이름, 체력바 등도 초기화 되는데, 이를 위해 EntityHealthWidget의 UpdateHealthWidget를 실행한다.
체력바 위젯도 몬스터의 종류(일반 몹, 정예 몹, 보스 몹 등의 분류)에 따라 다른 위젯을 이용하고 싶을 수 있으므로, 위와같이 업데이트 함수나 변수를 최상위 부모에 두고, 밑에서 구현하는 방식으로 제작하였다.
'게임 시작 -> 몬스터 정보 불러오기 -> 위젯 초기화' 의 과정을 부모 클래스에서 구현하는 식으로 만들었다고 보면된다.
아주 단순한 기능이지만, 확장성의 강박같은게 있어서 이런식으로 만들게 된다..
정상적으로 작동하는 것을 확인할 수 있다.