게임에서 맵 해금 시스템과 캐릭터 해금 시스템을 구현하고 싶어, 어떤 방식을 택할지 고민중에 있었다.
- 처음으로 떠올린 생각은 GameInstance 였는데, 현재 구현하는 시스템이 템플릿을 이용하다보니 만들어진 GameInstance를 수정하는 것 보다 다른 것을 이용해보고 싶었다.
- 그래서 SaveGame 이라는 시스템을 찾게 되었고, 어떤 식으로 사용했는지 정리해 볼 것이다.
1. SaveGame
USaveGame이라는 클래스를 상속받아서 클래스를 만들 수 있고, 이 시스템은 게임이 종료되더라도 유지되는 특성을 가지고 있다.
- 각 맵에 해당하는 변수를 아래와 같이 만들었다.
- Level 1의 경우는 항상 열려있기 때문에 필요가 없다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/SaveGame.h"
#include "SaveLevel.generated.h"
UCLASS()
class FOODRUMBLE_API USaveLevel : public USaveGame
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadWrite)
bool bIsLevel2Lock;
UPROPERTY(BlueprintReadWrite)
bool bIsLevel3Lock;
UPROPERTY(BlueprintReadWrite)
bool bIsLevel4Lock;
};
만약 레벨 1이 클리어된 경우 이 변수를 true로 바꿔주게 된다.
- Level 블루프린트에서 아래 로직을 수행하였다.
- "Create Save Game Object" 노드는 SaveGame을 만들게 된다.
- "Save Game to Slot" 의 경우 해당 정보를 가지고 Slot Name을 지정해서 값을 저장할 수 있다.
이 값들을 가지고 UI에서 아래와 같이 값을 업데이트 해줄 수 있다.
- "Load Game from Slot" 노드를 통해 casting 후 값을 가져올 수 있다.
- "Does Save Game Exist" 노드를 통해 해당 Slot에 저장되어있는지 확인할 수 있다.
- "Delete Game in Slot" 을 통해 전에 저장된 내용을 지울수도 있다.
- 그 이유는 게임을 종료해도 데이터가 저장되기 때문에 지우는 기능이 필요하다.
2. 동작 모습
'Unreal Engine' 카테고리의 다른 글
Unreal Engine - 데디케이티드 서버 3 (Property Replication) (0) | 2025.04.06 |
---|---|
Unreal Engine - 데디케이티드 서버 2 (1) | 2025.04.03 |
Unreal Engine - 야구게임(데디케이티드 서버) (0) | 2025.03.29 |
Unreal Engine - 데디케이티드 서버 개념 및 실습 (0) | 2025.03.27 |
Unreal Engine - 플러그인 만들기 (0) | 2025.03.26 |