UserWidget 기반의 BP를 생성하여 도착 지점에 도착했을 때 결과를 보여주는 Widget을 생성.
현재 점수와 순위, 이전 플레이의 Top 10 기록을 보여줄 수 있도록 Text와 Grid Panel을 사용.

위 Widget에서 Ranking, Score, Time이 각 순위, 점수, 랭킹 등록 시각.
게임의 결과를 저장하기 위하여 Top 10의 점수와 시각을 저장하고 있는 Ranking Scores, Ranking Times 배열을 생성.
또한, Save Game 기반의 BP를 생성하여 두 배열의 값을 저장할 수 있도록 함.
이후 Save Ranking 함수를 생성하여 Create Svae Game Object 노드와 Save Game to Slot 노드를 통해 Save Game Object에 두 배열을 저장.

게임이 실행됐을 때, GameMode의 Begin Play Event에서 Load Game from Slot 노드를 통해 Save Game Object를 Load하는 Load Ranking 함수도 구현.

기존 로직에서 Save Ranking 함수 호출 이전에 Ranking Scores와 Ranking Times 배열을 업데이트 해주어야 함.
Ranking Scores 배열에 { 4, 2, 1 }라는 값이 있을 때 3이라는 값이 추가되면 { 4, 3, 2, 1 }이 되도록 로직 구현.
For Each Loop 노드를 사용하여 현재 Score의 값이 배열의 값보다 작다면 Index++.
크다면 현재 Index에 Score 값이 들어가야 한다는 의미.

For Each Loop 노드 Break 이후 Scores, Times 두 배열에 Insert 노드를 통해 현재 플레이의 Score와 Times 값을 삽입.

Top 10 기록만 출력할 것이므로 배열의 크기가 10이 넘어간다면 Score 값이 제일 낮은 맨 마지막 원소를 제거.

도착 지점에 도달했을 경우 GameMode에서 End Game 함수를 호출하는데, 이때 결과 Widget이 생성되어야 함.
게임 종료 로직은 Game Mode에 있고, Widget 생성은 Player Controller가 해야하므로 Game Mode에서 Event를 발생시키고 이를 Controller가 받는 방식으로 구현.
Game Mode에서 Update Ranking, Save Ranking 이후 End Game이라는 Event 호출.

Controller에선 이 End Game Event를 Bind 하여 Result Widget을 생성하는 노드를 연결해놓음.

BreakPoint를 추가하여 실행해보면 End Game 함수에서 Event를 Broadcast하면 Controller의 End Game Event가 실행되는 것을 볼 수 있음.

이후 Widget의 Text Block들을 Score와 두 배열을 사용하여 Text를 업데이트 해줌.




오늘은 특이사항 없음.

첫 번째 플레이에서는 기록이 408점으로 2등, 두 번째 플레이에서는 217점으로 4등을 했고, 결과 Widget이 정상적으로 업데이트 되는 것을 볼 수 있음.