- 개요
레벨이 전환되어도 플레이어의 데이터는 정상적으로 보존되어야 한다
이때 이상적으로 사용할 수 있는 것이 바로 GameInstance인데,
GameInstance는 레벨이 전환되어도 데이터를 유지하는 이점이 존재한다
다만, GameInstance는 프로젝트에 하나만 존재할 수 있고 데이터가 많아질수록 결합도가 높아진다
따라서 GameInstance가 아닌, GameInstanceSubsystem을 사용하여
목적에 따른 여러개의 GameInstanceSubsystem을 사용하여 결합도를 낮추고 코드를 분리하여 관리한다
- 스크립트 작업
1) DS_GameInstanceSubsystem 클래스

플레이어의 데이터를 보존하고 관리하는 GameInstanceSubsystem 클래스를 생성한다
멤버변수는 위와 같이 구성한다
- bGameLiftInitialized 멤버변수 : AWS GameLift와 관련된 설정이 이루어졌는지 판단하는 불리언 변수
- ProcessParameters 멤버변수 : GameLift 서버 프로세스의 실행 파라미터를 저장하는 변수

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

ParseCommandLinePort 함수를 위와 같이 구성하여 커맨드 라인 인자에서 포트 번호를 찾아와
ProcessParameters 변수의 port 값으로 설정한다


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 환경을 설정한다
이후 GameInstanceSubsystem의 InitGameLift 함수를 호출하여 GameLift 관련 설정을 초기화한다

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

SetServerParameters 함수를 위와 같이 구성하여 Anywhere 환경에 필요한 설정을 진행한다
'언리얼 엔진 - 게임 프로젝트 > AWS GameLift를 활용한 데디케이트 FPS 프로젝트' 카테고리의 다른 글
| 로비와 타이머 - 6) 플레이어 입력 제한 (0) | 2026.07.09 |
|---|---|
| 로비와 타이머 - 5) 로비 게임모드의 구성과 레벨 전환 (0) | 2026.07.05 |
| 로비와 타이머 - 3) 매칭 게임 모드와 타이머 추가 (0) | 2026.07.02 |
| 로비와 타이머 - 2) 타이머 핸들 + PlayerController 클래스 추가 (0) | 2026.06.26 |
| 로비와 타이머 - 1) 로비와 타이머 구성 (0) | 2026.06.26 |