Unreal Engine 5의 Game Instance는 게임이 실행되는 동안 유지되는 객체로, 게임의 여러 레벨(맵) 간에 데이터를 공유하고 관리할 수 있는 매우 중요한 시스템입니다. 게임이 실행되는 동안 한 번만 생성되며, 레벨을 전환해도 사라지지 않고 지속되기 때문에, 게임 전반에 걸쳐 데이터를 저장하고 유지하는 데 유용합니다.
Game Instance는 주로 다음과 같은 경우에 사용됩니다:
- 플레이어 진행 상황 유지
- 전역 설정 저장
- 레벨 간에 데이터 공유
- 여러 플레이어의 상태를 관리
Game Instance의 주요 특징
- 레벨 간 데이터 유지: 레벨이 전환되더라도 데이터가 유지됩니다. 예를 들어, 플레이어가 레벨 1에서 얻은 아이템이나 점수를 레벨 2로 넘길 수 있습니다.
- 전역적 데이터 저장소: 게임 전체에서 공통으로 사용해야 하는 데이터를 저장할 수 있습니다. 예를 들어, 사운드 설정, 난이도, 혹은 로그인된 플레이어의 정보 등을 관리합니다.
- 게임 전반 상태 관리: 멀티플레이어 게임에서 서버나 클라이언트 상태를 추적하거나, 여러 레벨에서 사용할 수 있는 게임 상태(예: 점수, 아이템, 캐릭터 정보)를 저장합니다.
Game Instance 생성 및 사용 방법 (Blueprint)
1. 새로운 Game Instance 생성
- 프로젝트 세팅 변경:
- Unreal Editor에서
Edit
>Project Settings
로 이동합니다. Maps & Modes
탭에서Game Instance Class
항목을 찾습니다.- 오른쪽 드롭다운 메뉴에서 새로운 Game Instance를 생성합니다.
New Blueprint Class
버튼을 클릭하고, 부모 클래스로Game Instance
를 선택합니다.
- Game Instance Blueprint 생성:
Content Browser
에서Add
버튼을 클릭하고Blueprint Class
를 선택한 후Game Instance
를 부모 클래스로 선택합니다.- 새로운 Blueprint를 생성하고 적절한 이름을 지정합니다. 예를 들어,
MyGameInstance
라는 이름을 사용할 수 있습니다.
- 프로젝트 세팅에 반영:
- 생성한
MyGameInstance
Blueprint를 프로젝트 세팅의Game Instance Class
항목에 지정합니다. 이제 게임이 시작되면 이 Game Instance가 사용됩니다.
2. Game Instance에서 데이터 저장
- 변수 추가:
MyGameInstance
에서 예를 들어, 플레이어의 점수를 저장하는 변수를 추가할 수 있습니다.Variables
섹션에서PlayerScore
라는 변수를Integer
타입으로 추가합니다.
- 함수 생성:
- 점수를 저장하거나 불러오는 함수들을 만들 수 있습니다. 예를 들어,
SetPlayerScore
와GetPlayerScore
라는 함수를 만들어서 게임의 어느 곳에서나 플레이어 점수를 설정하고 가져올 수 있습니다.
- Game Instance에서 점수 설정 및 가져오기:
- 각 레벨의 Blueprint나 HUD에서
Get Game Instance
노드를 사용하여 Game Instance에 접근할 수 있습니다. - 해당 노드를 사용해
MyGameInstance
에 저장된 점수 데이터를 설정하거나 불러올 수 있습니다.
예제 1: Game Instance에서 점수 관리
- 점수 설정: 플레이어가 아이템을 획득할 때 점수를 Game Instance에 저장하는 예제입니다.
+-------------------------+ | Event OnItemCollected | +------------+-------------+ | v +-------------------------+ | Get Game Instance | +------------+-------------+ | v +-------------------------+ | Cast to MyGameInstance | +------------+-------------+ | v +-------------------------+ | SetPlayerScore (Custom) | +-------------------------+
이 과정에서 OnItemCollected
이벤트가 발생하면, Get Game Instance
노드를 통해 현재 Game Instance를 가져옵니다. 그런 다음 Cast to MyGameInstance
노드를 사용해 MyGameInstance
에 접근하고, 커스텀 함수인 SetPlayerScore
를 호출해 점수를 저장합니다.
- 점수 표시: HUD에서 현재 점수를 화면에 출력하는 예제입니다.
+-------------------------+ | Event Tick (HUD) | +------------+-------------+ | v +-------------------------+ | Get Game Instance | +------------+-------------+ | v +-------------------------+ | Cast to MyGameInstance | +------------+-------------+ | v +-------------------------+ | GetPlayerScore (Custom) | +------------+-------------+ | v +-------------------------+ | Print String (Score) | +-------------------------+
이 예제에서는 매 프레임마다 HUD에서 Game Instance의 점수를 가져와 화면에 출력합니다. Print String
노드를 통해 플레이어의 점수가 계속 업데이트되어 표시됩니다.
예제 2: 레벨 간 정보 유지
- 레벨 전환: 플레이어가 레벨을 전환할 때도 점수를 유지하는 예제입니다. 예를 들어, 레벨 1에서 점수를 획득한 후, 레벨 2로 넘어가도 점수가 그대로 유지됩니다.
+-------------------------+ | Event OnLevelComplete | +------------+-------------+ | v +-------------------------+ | Get Game Instance | +------------+-------------+ | v +-------------------------+ | Cast to MyGameInstance | +------------+-------------+ | v +-------------------------+ | SavePlayerProgress | +-------------------------+ | v +-------------------------+ | Open Level (NextLevel) | +-------------------------+
여기서, 플레이어가 특정 레벨을 완료하면 Get Game Instance
를 통해 현재 상태를 저장하고, 다음 레벨로 넘어가도 상태를 유지할 수 있습니다.
Game Instance의 활용 예시
- 플레이어 데이터 유지: RPG나 어드벤처 게임에서, 레벨을 넘어가도 플레이어의 체력, 아이템, 경험치 등을 계속 유지해야 할 때 Game Instance가 매우 유용합니다.
- 멀티플레이어 상태 관리: 멀티플레이어 게임에서 서버나 클라이언트의 상태, 또는 각 플레이어의 정보를 전역적으로 저장할 수 있습니다.
- 전역 설정 저장: 사운드 볼륨, 게임 난이도 등 게임 내 설정을 Game Instance에 저장하면 레벨 전환 시에도 설정이 유지됩니다.
결론
Unreal Engine 5에서 Game Instance는 레벨 간 데이터 전송 및 상태 유지를 위한 매우 중요한 도구입니다. Blueprint에서 Game Instance를 사용하면 게임 전반의 상태를 효율적으로 관리하고, 레벨 간 데이터를 쉽게 유지하며, 사용자 설정을 저장할 수 있습니다.