본문 바로가기

[UE4 지뢰찾기] 클리어 시간 저장하고 불러오기

Kwonriver 2022. 12. 17.
728x90

 

클리어하는 경우 시간 정보를 저장하고 불러와 화면에 노출하는 UI를 만들어본다.

 

먼저 SaveGame 클래스를 상속받아 FindMineSaveGame 클래스를 만든다.

 

이 클래스에는 저장할 정보들을 변수로 입력한다.

HighSpeedClearTime 은 가장 빠른 클리어 시간을 저장하며 ClearTimes는 역대 클리어한 시간을 모두 저장한다.

 

FindMineGameGameModeBase를 생성할 때 세이브파일이 있는지 체크하고 없는 경우 새로 만들어준다.

그 다음 최고 속도 클리어 타임과 역대 클리어 시간들을 저장한다.

게임을 실행하고 게임모드 베이스의 디테일 창을 보면 정상적으로 저장된 값을 볼 수 있다.

최고점을 체크하는 함수인 CheckFastestRecordUpdate() 함수에서 기록을 갱신했다면 저장 정보를 변경하고 역대 클리어 시간들에 저장한다. 그 다음 정보를 저장한다.

 

 

이렇게 세이브파일 생성과 저장 기능을 추가하였다.

 

이제 역대 클리어 타임들을 볼 수 있는 UI를 만든다.

이전에 만들었던 기본 UI에서 클리어 시간 버튼을 누르면 새로운 UI를 추가하도록 하였다.

또한 UI를 오픈할 때 뒷부분 게임영역이 클릭이 되면 안되므로 현재 게임 상태를 변경한다 (OpenUserClearTimesUI 함수)

 

이 때 BP_ClearTimesWidget라는 블루프린트 위젯을 생성하는데 ListView를 이용하여 스크롤을 만들었다.

 

BP_ClearTimesWidget

 

배경은 Blur를 이용하여 뿌옇게 만들었으며 GameModeBase에 저장되어 있는 ClearTimes를 이용하여 데이터를 파싱한다.

이때 ListView에 등록되는 하나의 인자는 새로운 블루프린트 위젯으로 BP_ClearTime이라고 새로 만들었다. 여기엔 시간 정보만 나타내도록 하였다. 

 

BP_ClearTime

ListView의 인자로 사용되기 위해서는 반드시 UserListObjectEntry 인터페이스를 추가해야한다. 

내 블루프린트 세팅에서 [인터페이스] - [추가] 버튼을 누르면 추가할 수 있다.

그런 다음 On List Item Object Set 이벤트를 그래프에 추가한다. 이 함수는 ListView의 인자로 추가될 때 호출되는 이벤트이다. 

 

 

매개변수로 넘어온 List Item Object를 BP_ClearTime으로 변환하고 텍스트를 세팅한다.

 

BP_ClearTimesWidget

 

BP_ClearTimesWidget에서는 Construct이벤트가 호출될 때 게임모드를 가져오고 User Clear Times 변수의 갯수만큼 BP_ClearTime 위젯을 생성한다. 그리고 ListView에 AddItem 함수를 이용하여 add 하는데 이 때 BP_ClearTime에 인터페이스를 추가하지 않았다면 Add 되지 않는다.

 

또한 AddItem 함수가 호출될 때 On List Item Object Set 이벤트가 호출된다. 즉, AddItem의 매개변수인 Item이 On List Item Object Set 이벤트의 매개변수인 List Item Object로 넘어오게 된다.

 

 

정상적으로 5개의 시간들이 나오는 것을 볼 수 있다.

 

참조

 

[UE4] UMG ListView 데이터 연동 방법

프로젝트 샘플 Bornsoul/ListView-Sample UE 4.24. Contribute to Bornsoul/ListView-Sample development by creating an account on GitHub. github.com 게임을 만들다 보면 리스트 목록이 필요한 경우가 생깁니다. 예를 들어 인벤토

bornsoul.tistory.com

 

728x90