언리얼 엔진의 GameInstance 클래스는 여러 레벨이나 게임 모드에서 공유해야 하는 영구 데이터를 관리하는 데 유용한 도구입니다. 다음은 GameInstance 클래스를 효과적으로 사용하기 위한 몇 가지 모범 사례입니다.
GameInstance 수명 주기 이해
GameInstance는 게임 시작 시 생성되며 게임이 종료될 때까지 유지됩니다. 게임을 디자인할 때 이 수명 주기를 인식하는 것이 중요합니다. 레벨이나 게임 모드 간에 지속되어야 하는 모든 데이터는 GameInstance에 저장되어야 합니다.
수준별 데이터에 사용하지 마십시오.
GameInstance는 단일 수준 또는 게임 모드에 특정한 데이터를 저장하는 데 사용해서는 안 됩니다. 대신 레벨 블루프린트나 GameState 클래스를 이 용도로 사용하세요.
전역 데이터에 사용
GameInstance는 플레이어 통계 또는 게임 설정과 같은 여러 수준 또는 게임 모드에서 액세스해야 하는 데이터를 저장하는 데 이상적입니다.
복제 방지
GameInstance는 기본적으로 복제되지 않으므로 여기에 저장된 모든 데이터는 로컬 시스템에서만 사용할 수 있습니다. 여러 클라이언트 간에 데이터를 공유해야 하는 경우 리플리케이트된 액터나 커스텀 네트워크 프로토콜을 사용하는 것이 좋습니다.
초기화에 주의
특히 디스크나 네트워크에서 데이터를 로드해야 하는 경우 GameInstance의 초기화를 제대로 수행하기 까다로울 수 있습니다. 충돌이나 예기치 않은 동작을 방지하려면 오류 및 예외 사례를 적절하게 처리해야 합니다.
이러한 모범 사례를 따르면 GameInstance 클래스를 사용하여 Unreal Engine 게임에서 영구 데이터를 효과적으로 관리할 수 있습니다.
Unreal Engine에서 GameInstance 클래스를 사용하는 방법을 보여주는 예제 코드 스니펫은 다음과 같습니다.
// MyGameInstance.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"
UCLASS()
class MYGAME_API UMyGameInstance : public UGameInstance
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Game Settings")
int32 DifficultyLevel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Player Stats")
float PlayerHealth;
virtual void Init() override;
virtual void Shutdown() override;
};
// MyGameInstance.cpp
#include "MyGameInstance.h"
void UMyGameInstance::Init()
{
Super::Init();
// Load game settings from disk
DifficultyLevel = LoadDifficultyLevel();
}
void UMyGameInstance::Shutdown()
{
// Save game settings to disk
SaveDifficultyLevel(DifficultyLevel);
Super::Shutdown();
}
이 예제에서는 UMyGameInstance라는 사용자 지정 GameInstance 클래스를 만들었습니다. 여기에는 게임 설정을 위한 'DifficultyLevel'과 플레이어 통계를 위한 'PlayerHealth'의 두 가지 속성이 있습니다.
Init() 메서드에서 디스크에서 DifficultyLevel을 로드합니다. 이 메서드는 GameInstance가 생성될 때 호출됩니다.
Shutdown() 메서드에서 DifficultyLevel을 디스크에 저장합니다. 이 메서드는 GameInstance가 파괴될 때 호출됩니다.
게임에서 이 GameInstance를 사용하려면 GameMode 또는 다른 관련 클래스에서 인스턴스를 만들 수 있습니다.
// MyGameMode.cpp
#include "MyGameMode.h"
#include "MyGameInstance.h"
void AMyGameMode::BeginPlay()
{
Super::BeginPlay();
// Get the GameInstance
UMyGameInstance* GameInstance = Cast<UMyGameInstance>(GetGameInstance());
// Access game settings
int32 DifficultyLevel = GameInstance->DifficultyLevel;
// Access player stats
float PlayerHealth = GameInstance->PlayerHealth;
}
이 예에서는 GameMode에서 GameInstance를 가져오고 이를 사용하여 DifficultyLevel 및 PlayerHealth 속성에 액세스합니다.
'개발자 이야기' 카테고리의 다른 글
자연어 처리(NLP)란? NLP 라이브러리 소개 (0) | 2023.03.22 |
---|---|
XLua 최적화 방법( LuaJIT ) (0) | 2023.03.22 |
Unity GetComponent의 성능향상을 위한 최적화 방법 (0) | 2023.03.22 |
스택과 힙 메모리 할당의 차이점과 각각을 언제 사용하는지 설명할 수 있습니까? (0) | 2023.03.21 |
메모리 단편화란 무엇이며 게임 성능에 어떤 영향을 미칠 수 있습니까? (0) | 2023.03.21 |