- 개요
게임에 참여하지 않은 로비에 있는 플레이어들을 관리하기 위한 2개의 클래스를 추가한다
AInfo 클래스는 월드에 존재하되, 물리적 형태나 시각 표현이 필요없는 Actor들의 최상위 클래스이다
따라서 보통 게임의 규칙이나 데이터를 관리하는 용도로 사용한다
AGameState 클래스는 서버와 클라이언트 모두가 접근할 수 있으며 현재 게임의 상태를 기록하는 용도로 사용한다
- 스크립트 작업
1) LobbyState 클래스

OnPlayerInfoChanged 델리게이트를 추가하여
로비의 플레이어 정보를 저장하는 LobbyPlayerInfo가 변경될 때마다 브로드캐스트한다

LobbyPlayerInfoDelta 구조체를 추가하여 로비에 입장한 플레이어와 퇴장한 플레이어를 저장한다

AInfo 클래스를 상속받은 LobbyState 클래스를 생성한다
멤버변수의 구성은 위와 같다
- OnPlayerInfoAdded 델리게이트 멤버변수 : 로비에 플레이어가 입장하면 브로드캐스트하는 델리게이트
- OnPlayerInfoRemove 델리게이트 멤버변수 : 로비에서 플레이어가 퇴장하면 브로드캐스트하는 델리게이트
- PlayerInfoArray 멤버변수 : 최종적으로 로비에 있는 플레이어들의 FastArraySerializerItem를 저장
- LastPlayerInfoArray 멤버변수 : 이전에 로비에 남아있는 플레이어들의 FastArraySerializerItem를 저장

생성자를 위와 같이 구성한다
Tick은 비활성화 + 해당 액터가 Replicate되도록 설정 + 거리에 상관없이 모든 클라이언트가 항상 수신하도록 설정한다

GetLifetimeReplicatedProps 함수를 오버라이드하여 멤버 변수를 Replicate하도록 설정한다
DOREPLIFETIME 매크로를 사용하여 PlayerInfoArray 멤버 변수가 변경되면 Replicate한다

AddPlayerInfo 함수와 RemovePlayerInfo 함수를 구현하여
PlayerInfoArray 멤버변수에서 플레이어를 추가 + 제거한다

ComputePlayerInfoDelta 함수를 위와 같이 구성한다
해당 함수를 호출하여 인자로 받은 2개의 배열을 비교하여 새로 입장한 플레이어와 새로 퇴장한 플레이어를 판별한다

OnRep_LobbyPlayerInfo 함수의 로직을 위와 같이 구성한다
ComputePlayerInfoDelta 함수를 호출하여 이전 배열과 새로 전달받은 배열의 차이를 로컬 변수에 저장한다
이후 로컬 변수의 AddedPlayers와 RemovedPlayers를 순회하면서 입장 + 퇴장에 맞는 브로드캐스트를 진행한다
이후 이전의 배열을 갱신한다
2) DSGameState 클래스

OnLobbyStateInitialized 델리게이트를 추가하여 LobbyState가 초기화되면 브로드캐스트한다

DSGameState 클래스를 위와 같이 구성한다
멤버변수는 다음과 같다
- LobbyState 멤버변수 : 로비에 대한 LobbyState
- OnLobbyStateInitialized 델리게이트 멤버변수 : LobbyState가 초기화되면 브로드캐스트

생성자를 위와 같이 구성하여 해당 Actor가 Replicate되도록 설정한다

GetLifetimeReplicatedProps 함수를 오버라이드하여 멤버 변수에 대해 Replicate하도록 설정한다
매크로를 사용하여 LobbyState 멤버변수가 변경되면 Replicate한다

OnRep_LobbyState 함수는 LobbyState 멤버변수가 변경되어 Replicate되면 호출한다
OnLobbyStateInitialized 델리게이트를 통해 LobbyState를 브로드캐스트한다

CreateLobbyState 함수의 로직은 위와 같이 구성한다
월드를 가져와 LobbyState 객체를 생성한 후에 LobbyState 변수의 값으로 설정한다
이후 생성한 객체의 Owner를 DSGameState로 설정한다

BeginPlay 함수의 로직을 위와 같이 오버라이드한다
서버인지 확인한 후에 CreateLobbyState 함수를 호출하여 LobbyState를 생성하고
생성한 LobbyState를 델리게이트를 통해 브로드캐스트한다
'언리얼 엔진 - 게임 프로젝트 > AWS GameLift를 활용한 데디케이트 FPS 프로젝트' 카테고리의 다른 글
| PlayerSession 처리 - 최종) UI를 통한 게임에 접속한 플레이어 표시 (0) | 2026.07.23 |
|---|---|
| PlayerSession 처리 - 2) FastArraySerializer의 사용 (0) | 2026.07.16 |
| PlayerSession 처리 - 1) PlayerSession 승인과 제거 (0) | 2026.07.12 |
| 로비와 타이머 - 최종) 퇴장 버튼과 타이머 개선 (0) | 2026.07.10 |
| 로비와 타이머 - 6) 플레이어 입력 제한 (0) | 2026.07.09 |