[이득우 언리얼 C++] 11. 게임 데이터와 UI 위젯
- 📕 Book/이득우 언리얼 C++
- 2022. 2. 4.
💻 Code : https://github.com/tedison7/ArenaBattle
엑셀 데이터의 활용
엑셀에 저장돼 있는 캐릭터 스탯 데이터 테이블을 언리얼 엔진에 불러들이는 기능을 구현해보자. 언리얼 엔진은 게입을 관리하기 위한 용도로 게임 인스턴스라는 언리얼 오브젝트를 제공한다. 이 게임 인스턴스가 게임의 데이터를 관리하도록 작업하고자 한다. GameInstance 클래스를 상속받는 ABGameInstance클래스를 생성하고. 생성한 ABGameInstance클래스가 게임을 관리하도록 지정하기 위해 프로젝트 세팅의 맵&모드 탭에서 GameInstance 항목을 ABGameInstance로 지정하였다.
그리고 ABGameInstance의 Init함수를 구현하여 로그를 찍어보자
컴파일후 시작시 로그가 찍히는 것을 확인할 수 있다. 예제 코드 파일에서 미리 만들어진 데이터 엑셀 파일을 가져와서 CSV로 저장한다.
CSV 파일을 읽어들이기 위해 구조가 동일한 구조체를 선언해야한다 FTableRowBase 구조체를 상속 받은 FABCharacterData 라는 구조체를 선언한다.
컴파일 하게되면 CSV파일을 임포트 할수 있다. 컨텐츠 폴더내에 GameData 폴더를 생성하고 임포트 버튼을 눌러서 CSV파일을 선택하고 데이터테이블 옵션에서 ABCharacterData를 선택하여 임포트 한다.
이제 GameInstace의 DataTable을 멤버 변수로 설정해서 데이터 로딩을 해보자.
컴파일하고 실행해보면 출력 로그에 데이터가 올바르게 로드되었는지 확인해 볼 수 있다.
액터 컴포넌트의 제작
스탯 관리를 하는 액터 컴포넌트 클래스를 추가해보자. ActorComponent를 상속받는 ABCharacterStatComponent 클래스를 생성한다. 그리고 해당 컴포넌트를 ABCharacter의 멤버변수로 추가하자.
컴파일후 플레이를 한상태에서 CharacterStat 컴포넌트를 선택하여 CurrentHP 값을 통해 데이터의 값이 적용됨을 확인 할 수 있다. 다음으로 대미지를 받으면 CurrentHP를 차감하고 0이하가 되면 캐릭터가 죽도록 해보자.
컴파일후 공격을 해보면 공격마다 대미지 10씩 주고, 체력이 다되면 사망모션이 출력되는것을 확인 할 수 있다.
캐릭터 위젯 UI 제작
이번에는 캐릭터의 HP가 시각적으로 보이도록 UI위젯을 제작해보자. UI폴더를 추가하고 해당 폴더에 UI_HPBar이름을 가진 위젯 블루프린트를 생성하였다. 그리고 책을따라 다음과 같이 UI를 디자인 하였다.
모듈과 빌드 설정
이제 생성한 UI를 캐릭터에 부착해보자. 언리얼 엔진은 액터에 UI 위젯을 부착할 수 있도록 UWidgetComponent클래스를 제공한다. 해당 클래스를 사용하기 위해서는 UMG 모듈을 추가하여야 한다. 자세한 내용은 이전에 작성한 UMG 모듈 사용에 대한 포스팅 글을 확인 바란다.
컴파일후 실행을 해보면 HPBar가 캐릭터 머리위에 띄워져 있음을 확인할 수 있다.
UI와 데이터의 연동
이제 HPBar에 데이터를 연동하여 보자 UserWidget을 상속받은 ABCharacterWidget 클래스를 생성하였다. 해당클래스는 ABCharacterStatComponent와 연동하여 캐릭터의 스탯이 변화할 때마다 프로그레스바의 내용을 업데이트 하도록 할 것이다. 책의 내용에 따라 코드를 작성하였고 스탯을 연결한 최종 화면은 다음과 같다. 코드는 Github에 올려두었다.
요약
- 엑셀 데이터 CSV 파일 언리얼 엔진 임포트
- 액터 컴포넌트에 대한 이해
- 캐릭터 HP Bar 제작을 통한 위젯 UI 이해