Unreal Game Instance

Unreal Engine 5의 Game Instance는 게임이 실행되는 동안 유지되는 객체로, 게임의 여러 레벨(맵) 간에 데이터를 공유하고 관리할 수 있는 매우 중요한 시스템입니다. 게임이 실행되는 동안 한 번만 생성되며, 레벨을 전환해도 사라지지 않고 지속되기 때문에, 게임 전반에 걸쳐 데이터를 저장하고 유지하는 데 유용합니다.

Game Instance는 주로 다음과 같은 경우에 사용됩니다:

  • 플레이어 진행 상황 유지
  • 전역 설정 저장
  • 레벨 간에 데이터 공유
  • 여러 플레이어의 상태를 관리

Game Instance의 주요 특징

  1. 레벨 간 데이터 유지: 레벨이 전환되더라도 데이터가 유지됩니다. 예를 들어, 플레이어가 레벨 1에서 얻은 아이템이나 점수를 레벨 2로 넘길 수 있습니다.
  2. 전역적 데이터 저장소: 게임 전체에서 공통으로 사용해야 하는 데이터를 저장할 수 있습니다. 예를 들어, 사운드 설정, 난이도, 혹은 로그인된 플레이어의 정보 등을 관리합니다.
  3. 게임 전반 상태 관리: 멀티플레이어 게임에서 서버나 클라이언트 상태를 추적하거나, 여러 레벨에서 사용할 수 있는 게임 상태(예: 점수, 아이템, 캐릭터 정보)를 저장합니다.

Game Instance 생성 및 사용 방법 (Blueprint)

1. 새로운 Game Instance 생성

  1. 프로젝트 세팅 변경:
  • Unreal Editor에서 Edit > Project Settings로 이동합니다.
  • Maps & Modes 탭에서 Game Instance Class 항목을 찾습니다.
  • 오른쪽 드롭다운 메뉴에서 새로운 Game Instance를 생성합니다. New Blueprint Class 버튼을 클릭하고, 부모 클래스로 Game Instance를 선택합니다.
  1. Game Instance Blueprint 생성:
  • Content Browser에서 Add 버튼을 클릭하고 Blueprint Class를 선택한 후 Game Instance를 부모 클래스로 선택합니다.
  • 새로운 Blueprint를 생성하고 적절한 이름을 지정합니다. 예를 들어, MyGameInstance라는 이름을 사용할 수 있습니다.
  1. 프로젝트 세팅에 반영:
  • 생성한 MyGameInstance Blueprint를 프로젝트 세팅의 Game Instance Class 항목에 지정합니다. 이제 게임이 시작되면 이 Game Instance가 사용됩니다.

2. Game Instance에서 데이터 저장

  1. 변수 추가:
  • MyGameInstance에서 예를 들어, 플레이어의 점수를 저장하는 변수를 추가할 수 있습니다.
  • Variables 섹션에서 PlayerScore라는 변수를 Integer 타입으로 추가합니다.
  1. 함수 생성:
  • 점수를 저장하거나 불러오는 함수들을 만들 수 있습니다. 예를 들어, SetPlayerScoreGetPlayerScore라는 함수를 만들어서 게임의 어느 곳에서나 플레이어 점수를 설정하고 가져올 수 있습니다.
  1. Game Instance에서 점수 설정 및 가져오기:
  • 각 레벨의 Blueprint나 HUD에서 Get Game Instance 노드를 사용하여 Game Instance에 접근할 수 있습니다.
  • 해당 노드를 사용해 MyGameInstance에 저장된 점수 데이터를 설정하거나 불러올 수 있습니다.

예제 1: Game Instance에서 점수 관리

  1. 점수 설정: 플레이어가 아이템을 획득할 때 점수를 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를 호출해 점수를 저장합니다.

  1. 점수 표시: 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. 레벨 전환: 플레이어가 레벨을 전환할 때도 점수를 유지하는 예제입니다. 예를 들어, 레벨 1에서 점수를 획득한 후, 레벨 2로 넘어가도 점수가 그대로 유지됩니다.
   +-------------------------+
   | Event OnLevelComplete    |
   +------------+-------------+
                |
                v
   +-------------------------+
   | Get Game Instance        |
   +------------+-------------+
                |
                v
   +-------------------------+
   | Cast to MyGameInstance   |
   +------------+-------------+
                |
                v
   +-------------------------+
   | SavePlayerProgress       |
   +-------------------------+
                |
                v
   +-------------------------+
   | Open Level (NextLevel)   |
   +-------------------------+

여기서, 플레이어가 특정 레벨을 완료하면 Get Game Instance를 통해 현재 상태를 저장하고, 다음 레벨로 넘어가도 상태를 유지할 수 있습니다.

Game Instance의 활용 예시

  1. 플레이어 데이터 유지: RPG나 어드벤처 게임에서, 레벨을 넘어가도 플레이어의 체력, 아이템, 경험치 등을 계속 유지해야 할 때 Game Instance가 매우 유용합니다.
  2. 멀티플레이어 상태 관리: 멀티플레이어 게임에서 서버나 클라이언트의 상태, 또는 각 플레이어의 정보를 전역적으로 저장할 수 있습니다.
  3. 전역 설정 저장: 사운드 볼륨, 게임 난이도 등 게임 내 설정을 Game Instance에 저장하면 레벨 전환 시에도 설정이 유지됩니다.

결론

Unreal Engine 5에서 Game Instance는 레벨 간 데이터 전송 및 상태 유지를 위한 매우 중요한 도구입니다. Blueprint에서 Game Instance를 사용하면 게임 전반의 상태를 효율적으로 관리하고, 레벨 간 데이터를 쉽게 유지하며, 사용자 설정을 저장할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *