한 줄 위젯 WBP_RankRow
순위 한 줄을 그리는 위젯
- WBP_RankRow 생성(User Widget)
- Horizontal Box를 하나 놓고 그 안에 Text Block 세 개를 나란히: 등수 / 이름 / 생존시간
- 세 Text Block을 각각 선택하고 오른쪽 Details 위쪽의 Is Variable 체크박스를 킴
- 이름은 알아보기 쉽게 정하기 (등수, 이름, 생존시간)
- Graph 탭으로 가서 이 줄에 데이터를 채우는 함수 생성
이름 SetRowData
입력 파라미터 3개:- InRank (Integer), InName (String), InTime (Float)
- 함수 안에서: Text_Rank에 SetText(InRank를 ToText로), Text_Name에 InName, Text_Time에 InTime을 "~초 생존"으로 포맷해서 SetText
- 시간 포맷은 Round(InTime) →->ToText(Int)

variables는 이후에 한글로 변경함 등수 이름 생존시간으로 
목록 컨테이너 WBP_Ranking
이게 실제로 GameState에 연결될 순위표
배열을 읽어서 위의 줄 위젯을 개수만큼 찍음
- WBP_Ranking 생성
Designer에 Vertical Box 하나 놓고 Is Variable 켜서 이름 Box_RankList- Vertical Box는 자식을 세로로 쌓는 컨테이너
- Graph 탭에서 갱신 함수 RefreshRanking 생성
이 함수가 하는 일 목록 비우고 -> 배열 순회하며 줄 찍기- Get Game State -> Cast to FDGameState -> Get HiderRankings 로 배열을 가져옴
- 그 배열에 대고 For Each Loop를 걸기 (배열을 하나씩 훑는 반복 노드)
- 루프 Body 안에서
- Create Widget -> Class는 WBP_RankRow -> 방금 만든 줄 위젯 인스턴스 하나 생성
- 그 위젯에 대고 SetRowData 호출 입력엔 Array Element에서 뽑은 값들을 연결
- Array Element -> Rank -> InRank
- Array Element -> Player Name -> InName
- Array Element -> Survival Time -> InTime
- 그 위젯을 Box_RankList -> Add Child로 세로 박스에 추가

- 목록 비우기 Box_RankList -> Clear Children
- RefreshRanking 두 군데서 부르기
1. OnRankingsUpdated 방송에 바인딩 배열이 위젯보다 늦게 도착하는 경우 대비
Get Game State -> Cast to FDGameState -> Bind Event to OnRankingsUpdated로 묶고 그 이벤트가 RefreshRanking를 부르게 함
2. Event Construct에서 한 번 위젯이 뜰 때 이미 배열이 도착해 있으면 이 호출로 바로 그려짐

연결
- BP_FDGameState -> UI -> Ranking Widget Class에 WBP_Ranking 할당
이러면 C++의 UpdatePhaseUI가 GameOver phase에서 WBP_Ranking을 화면에 띄우고 그 위젯이 배열을 읽어 줄을 찍음
'프로젝트 > Funny Or Die (멀티플레이 술래잡기 게임)' 카테고리의 다른 글
| 게임 시작 UI 디자인 (0) | 2026.07.18 |
|---|---|
| 순위창 UI 제작 (0) | 2026.07.18 |
| 하이더 생존 순위 만들기 (0) | 2026.07.18 |
| PlayerStart 태그로 역할별 위치 분리 (텔레포트) (0) | 2026.07.18 |
| [트러블슈팅] 리슨 서버에서 클라이언트만 인벤토리 UI가 갱신되지 않음 (0) | 2026.07.17 |
