1. GameInstance의 핵심 개념
일반적으로 액터(Actor)나 레벨(Level)은 새로운 맵으로 이동할 때마다 메모리에서 삭제되고 다시 생성됩니다. 하지만 GameInstance는 다릅니다.
- 생명주기: 게임 프로세스가 실행될 때 생성되어, 프로그램을 완전히 종료할 때까지 단 한 번만 생성되고 유지됩니다.
- 유일성: 게임 내에 딱 하나만 존재하는 싱글톤(Singleton) 패턴의 역할을 합니다.
- 전역성: 어떤 레벨, 어떤 액터에서도 쉽게 접근할 수 있는 허브 역할을 합니다.
2. 주요 용도 (데이터의 영속성)
레벨이 바뀌어도 유지되어야 하는 데이터는 모두 이곳에서 관리합니다.
- 레벨 간 데이터 전송: 1스테이지에서 획득한 아이템 목록이나 점수를 2스테이지로 넘길 때 사용합니다.
- 플레이어 설정: 옵션 메뉴에서 설정한 사운드 크기, 그래픽 옵션 등.
- 로그인 및 서버 정보: 멀티플레이어 게임에서 서버 접속 정보나 유저 세션 정보를 보관합니다.
- 전역 매니저: 인벤토리 시스템, 퀘스트 시스템 등 게임 전체를 관통하는 시스템의 본체 역할을 수행합니다.
3. C++ 및 블루프린트에서의 활용
C++에서 접근하는 방법
어디서든 GetGameInstance() 함수를 통해 접근할 수 있으며, 본인이 만든 커스텀 클래스로 캐스팅하여 사용합니다.
C++
// 예: 현재 게임 인스턴스를 가져와서 내 클래스로 형변환
UMyGameInstance* GI = Cast<UMyGameInstance>(GetGameInstance());
if (GI)
{
GI->SavePlayerScore(100);
}
블루프린트에서 접근하는 방법
- Get Game Instance 노드를 배치한 후, **Cast to [YourGameInstanceName]**을 연결하여 사용합니다.
4. 주의사항 및 한계
- 멀티플레이어: GameInstance는 **로컬(클라이언트)**에만 존재합니다. 즉, 서버와 클라이언트가 각자의 GameInstance를 가집니다. 서버의 데이터를 클라이언트에 복제(Replication)하는 용도로는 적합하지 않습니다.
- 무거운 로직: 게임 전체 세션 동안 메모리에 상주하므로, 너무 많은 대용량 에셋을 변수로 들고 있으면 메모리 낭비가 심해질 수 있습니다.
💡 요약: 유니티와 비교
- 유니티: static 변수를 쓰거나, DontDestroyOnLoad를 호출한 GameObject를 사용함.
- 언리얼: 엔진 차원에서 공식적으로 제공하는 GameInstance 클래스를 상속받아 사용함.
'UE5' 카테고리의 다른 글
| [UE5] 유니티 개발자를 위한 언리얼 액터 생명주기 완벽 가이드 (0) | 2025.12.26 |
|---|