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

로비와 타이머 - 4) 레벨 전환 및 서버 연결 상태에 따른 게임 데이터 보존과 관리

monstro 2026. 7. 3. 14:49
728x90
반응형

- 개요

레벨이 전환되어도 플레이어의 데이터는 정상적으로 보존되어야 한다

이때 이상적으로 사용할 수 있는 것이 바로 GameInstance인데,

GameInstance는 레벨이 전환되어도 데이터를 유지하는 이점이 존재한다

다만, GameInstance는 프로젝트에 하나만 존재할 수 있고 데이터가 많아질수록 결합도가 높아진다

따라서 GameInstance가 아닌, GameInstanceSubsystem을 사용하여

목적에 따른 여러개의 GameInstanceSubsystem을 사용하여 결합도를 낮추고 코드를 분리하여 관리한다

 

- 스크립트 작업

1) DS_GameInstanceSubsystem 클래스

 

플레이어의 데이터를 보존하고 관리하는 GameInstanceSubsystem 클래스를 생성한다

멤버변수는 위와 같이 구성한다

  • bGameLiftInitialized 멤버변수 : AWS GameLift와 관련된 설정이 이루어졌는지 판단하는 불리언 변수
  • ProcessParameters 멤버변수 : GameLift 서버 프로세스실행 파라미터를 저장하는 변수

 

 

생성자를 위와 같이 구성하여 bGameLiftInitialized 변수의 값을 False로 설정한다

 

 

ParseCommandLinePort 함수를 위와 같이 구성하여 커맨드 라인 인자에서 포트 번호를 찾아

ProcessParameters 변수의 port 값으로 설정한다

 

InitGameLift 함수 로직 (1)

 

InitGameLift 함수 로직 (2)

 

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

크게 다음과 같이 동작한다

  • bGameLiftInitialized 변수를 확인하여 GameLift 관련 설정 초기화를 진행
    • 1) GameLiftServerSDK 모듈을 로드
    • 2) GameLift Anywhere(로컬) 환경인지 검사
    • 3) OnStartGameSession 델리게이트에 콜백함수 바인딩 
    • 4) OnTerminate 델리게이트에 콜백함수 바인딩  
    • 5) OnHealthCheck 델리게이트에 콜백함수 바인딩
    • 6) 포트 + 로그 경로 설정
  • bGameLiftInitialized 변수의 값을 True로 설정

 

2) DS_LobbyGameMode 클래스

 

기존의 DS_GameMode 클래스를 DS_LobbyGameMode 클래스로 변경하고 코드 구조를 수정한다

GameInstanceSubsystem을 멤버변수로 추가하여 GameLift 관련 설정 초기화를 위임한다

 

 

InitGameLift 함수를 위와 같이 수정한다

GameInstance를 통해 DS_GameInstnaceSubsystem을 가져오고

커맨드라인 인자를 파싱하여 Anywhere 환경이라면 SetServerParameters 함수를 호출하여 Anywhere 환경을 설정한다

이후 GameInstanceSubsystemInitGameLift 함수를 호출하여 GameLift 관련 설정을 초기화한다

 

 

BeginPlay 함수를 위와 같이 구성하여 서버라면 InitGameLift 함수를 호출한다

 

 

SetServerParameters 함수를 위와 같이 구성하여 Anywhere 환경에 필요한 설정을 진행한다

728x90
반응형