언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트

PlayerSession 처리 - 3) AInfo 클래스와 AGameState 클래스

monstro 2026. 7. 16. 18:53
728x90
반응형

- 개요

게임에 참여하지 않은 로비에 있는 플레이어들을 관리하기 위한 2개의 클래스를 추가한다

AInfo 클래스월드에 존재하되, 물리적 형태나 시각 표현이 필요없는 Actor들의 최상위 클래스이다

따라서 보통 게임의 규칙이나 데이터를 관리하는 용도로 사용한다

AGameState 클래스서버와 클라이언트 모두가 접근할 수 있으며 현재 게임의 상태를 기록하는 용도로 사용한다

 

- 스크립트 작업

1) LobbyState 클래스

 

OnPlayerInfoChanged 델리게이트를 추가하여

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

 

LobbyPlayerInfoDelta 구조체

 

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

 

 

AInfo 클래스를 상속받은 LobbyState 클래스를 생성한다

멤버변수의 구성은 위와 같다

  • OnPlayerInfoAdded 델리게이트 멤버변수 : 로비에 플레이어가 입장하면 브로드캐스트하는 델리게이트
  • OnPlayerInfoRemove 델리게이트 멤버변수 : 로비에서 플레이어가 퇴장하브로드캐스트하는 델리게이트
  • PlayerInfoArray 멤버변수 : 최종적으로 로비에 있는 플레이어들의 FastArraySerializerItem를 저장
  • LastPlayerInfoArray 멤버변수 : 이전로비에 남아있는 플레이어들의 FastArraySerializerItem를 저장

 

 

생성자를 위와 같이 구성한다

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

 

 

GetLifetimeReplicatedProps 함수를 오버라이드하여 멤버 변수Replicate하도록 설정한다

DOREPLIFETIME 매크로를 사용하여 PlayerInfoArray 멤버 변수가 변경되면 Replicate한다

 

 

AddPlayerInfo 함수RemovePlayerInfo 함수를 구현하여

PlayerInfoArray 멤버변수에서 플레이어를 추가 + 제거한다

 

 

ComputePlayerInfoDelta 함수를 위와 같이 구성한다

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

 

 

OnRep_LobbyPlayerInfo 함수의 로직을 위와 같이 구성한다

ComputePlayerInfoDelta 함수를 호출하여 이전 배열새로 전달받은 배열의 차이를 로컬 변수에 저장한다

이후 로컬 변수의 AddedPlayersRemovedPlayers를 순회하면서 입장 + 퇴장에 맞는 브로드캐스트를 진행한다

이후 이전의 배열을 갱신한다

 

2) DSGameState 클래스

 

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

 

 

DSGameState 클래스를 위와 같이 구성한다

멤버변수는 다음과 같다

  • LobbyState 멤버변수 : 로비에 대한 LobbyState
  • OnLobbyStateInitialized 델리게이트 멤버변수 : LobbyState 초기화되면 브로드캐스트

 

 

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

 

 

GetLifetimeReplicatedProps 함수를 오버라이드하여 멤버 변수에 대해 Replicate하도록 설정한다

매크로를 사용하여 LobbyState 멤버변수가 변경되면 Replicate한다

 

 

OnRep_LobbyState 함수LobbyState 멤버변수가 변경되어 Replicate되면 호출한다

OnLobbyStateInitialized 델리게이트를 통해 LobbyState를 브로드캐스트한다

 

 

CreateLobbyState 함수의 로직은 위와 같이 구성한다

월드를 가져와 LobbyState 객체를 생성한 후에 LobbyState 변수의 값으로 설정한다

이후 생성한 객체의 OwnerDSGameState로 설정한다

 

 

BeginPlay 함수의 로직을 위와 같이 오버라이드한다

서버인지 확인한 후에 CreateLobbyState 함수를 호출하여 LobbyState를 생성하고

생성한 LobbyState델리게이트를 통해 브로드캐스트한다

728x90
반응형