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

PlayerSessions - 2) 클라이언트를 통한 PlayerSession 생성 준비

monstro 2026. 5. 28. 16:43
728x90
반응형

- 개요

PlayerSession을 생성하는 CreatePlayerSession 람다 함수의 리소스를 생성하고

생성한 리소스를 사용하여 클라이언트로부터 요청을 받아 서버에서 PlayerSession을 생성하는 절차를 준비한다

 

- AWS 콘솔 작업

 

클라이언트가 AWS에 요청할 서비스의 경로인 리소스 루트 바로 아래에 새롭게 추가한다 

생성한 리소스를 사용하여 클라이언트에서 AWS로 CreatePlayerSession 람다 함수의 실행을 요청한다

 

 

CreatePlayerSession 람다 함수 리소스의 메서드로 생성한다

해당 람다 함수는 PlayerSession을 생성하므로 리소스를 생성하는 POST 메서드로 설정한다

 

 

리소스를 바탕으로 생성한 URL 스테이지를 설정하여 생성한 API를 배포한다

위와 같이 스테이지를 통해 배포된 API 실제 사용이 가능하다

 

 

최종적으로 위의 URL을 사용하여 API를 사용할 수 있다

 

- 스크립트 작업(DedicatedServers 모듈 관련)

1) DedicatedServersTags 클래스

헤더 파일

 

cpp 파일

 

위와 같이 태그를 선언 + 정의하여 CreatePlayerSession 람다의 리소스에 대응하는 태그를 선언한다

 

2) HTTPRequestManager 클래스

 

중재자 클래스들의 조상 클래스SerializeJsonContent 함수를 추가한다

해당 함수를 호출하여 HTTP 요청의 결과값으로 반환된 JSON 데이터를 파싱한다

 

 

SerializeJsonContent 함수의 로직은 위와 같다

MakeShared 템플릿 함수를 사용하여 새로운 JsonObject 객체를 생성한다

해당 객체를 사용하여 파싱할 JSON 데이터를 저장한다

인자로 받은 데이터를 순회하면서 생성한 JsonObject 객체에 문자열로 저장한다

이후 JsonWriter를 사용하여 JSON 데이터를 문자열직렬화하고 반환한다

 

3) PortalManager 클래스

 

포탈 UI서버 사이에 존재하는 중재자PortalManager 클래스에 위와 같이 멤버함수와 멤버변수를 추가한다

CreateSessionTimer 멤버변수일정시간 후GameSession에 플레이어를 입장시키는 용도로 사용한다

 

 

FindOrCreateGameSession_Response 함수의 로직을 위와 같이 수정한다

불필요한 디버그 메세지응답을 로그로 출력하는 코드를 제거한다

응답으로부터 GameSession 관련 정보를 추출하여 HandleGameSessionStatus 함수에 인자로 넘겨준다

 

 

GetUniquePlayerId 함수의 로직은 위와 같다

로컬 플레이어의 고유 ID를 가져와"Player_숫자"의 문자열로 반환하도록 구성하였다

이때 조건문에서는 GetUniqueId 함수를 호출하여 유저 고유의 네트워크 ID를 사용하고

반환문에서는 GetUniqueID 함수를 호출하여 메모리상의 객체 인덱스 ID를 반환한다

이는 위험하지만 추후 사용자의 이름을 통해 고유한 플레이어 ID를 가져오도록 수정할 것이므로 유지한다

 

 

HandleGameSessionStatus 함수의 로직은 위와 같다

GameSession의 상태가 완전히 열려있고 바로 진입할 수 있는 ACTIVE 상태라면

해당 플레이어의 고유 IDGameSession의 ID를 인자로 넘겨주어 TryCreatePlayerSession 함수를 호출한다

만약, GameSession이 아직 완전히 열리지 않준비 중인 상태인 ACTIVATING 상태라면

0.5초 뒤에 다시한번 JoinGameSession 함수를 호출한다

 

 

TryCreatePlayerSession 함수의 로직은 위와 같다

HTTP 통신을 이용특정 플레이어의 Player Session을 생성하는 HTTP 요청을 AWS GameLift에 전송한다

 

 

CreatePlayerSession_Response 함수는 빈 공간으로 아직 정의하지 않았다

서버로 전송한 Player Session 생성 요청의 실행 결과에 따라 다르게 동작한다

 

- 블루프린트 작업

1) DA_GameSessionsAPIData 데이터 애셋

 

CreatePlayerSession 람다의 리소스에 해당하는 Tag와 값을 정의한다

728x90
반응형