언리얼 GameInstance 클래스 효과적으로 사용하기

개발자 이야기

언리얼 GameInstance 클래스 효과적으로 사용하기

kilius 2023. 3. 22. 14:40
728x90
반응형

언리얼 엔진의 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 속성에 액세스합니다.

728x90
반응형