본문 바로가기

모바일 게임 개발/[입문]브러쉬유

35. 브러쉬유: 게임 데이터 저장/불러오기(1)

 

 

# 콤보 기록을 지키는 방법

 

열심히 게임을 해서 Max Combo 신기록을 달성했는데 그 기록이 날아가면 허무하겠죠. 게임을 다시 하고싶은 생각이 안들거예요. 그래서 데이터 저장을 해주어야 하는데요. 보통은 데이터를 파일로 만들어서 저장장치에 저장하는 방법을 사용해요.

(괜히 넣어본 아이콘)

 


# 언리얼에서 사용하는 방법

    SaveGame 클래스

 

save game의 뜻은 '게임을 저장하다'인데요. 언리얼 엔진에서는 이름이 'SaveGame'인 클래스를 제공해줍니다. 이번 장에서는 이 클래스를 사용해서 게임 내 데이터를 파일로 만들어서 안전하게 저장하는 방법을 알아보겠습니다.

 


# SaveGame 클래스 만들기

   Framework 폴더

 

1. Framework 폴더에 블루프린트 클래스 만들기를 시작하세요.

2. 부모 클래스 선택창에서 SaveGame을 검색해서 나오는 클래스를 선택하세요.

SaveGame 클래스는 Object 클래스의 자식 클래스네요. 참고로 Object(정확히는 UObject)클래스는 언리얼 엔진에서 사용하는 모든 클래스의 조상 클래스에요. (최상위 클래스라고도해요.)

3. 이름은 SG_BrushYou로 지은 다음 블루프린트를 여세요.

4. 맵(Map) 컨테이너를 하나 추가해볼게요. 먼저 변수를 하나 만들고, Data라고 이름지으세요.

5. 타입(Type)을 String으로 바꾸세요.

6. 변수 블록 아이콘을 누른 뒤 Map을 선택하세요. 아래 그림처럼 나오면 됩니다.

 

맵(Map)이라는 것이 처음 나왔네요. 맵은 각각의 데이터에 대해 이름표를 붙여서 관리하려고 만든 컨테이너에요. 보통 이때 저장되는 데이터를 Value 라고 부르고, 이름표는 Key 라고 불러요. 자세한 내용은 아래에서 확인해보세요.

 

블루프린트 맵

블루프린트의 고급 컨테이너 유형인 Map, 맵 컨테이너 생성 및 편집 방법을 포함해서 이 컨테이너의 프로퍼티 개요입니다.

docs.unrealengine.com

'입문' 과정인데 Advanced 딱지가 붙은 내용을 소개해드려서 죄송합니다. ( _ _ )

 

자! 이제 Data 맵 컨테이너에 데이터를 저장하고 불러오는 함수를 SG_BrushYou 클래스 안에 구현해보겠습니다.

7. 함수를 두개 만들고 각각 LoadIntData, SaveIntData라는 이름을 붙여주세요.

LoadIntData는 저장된 데이터를 불러오는 역할을, SaveIntData는 데이터를 저장하는 역할을 맡을거예요. 이때 'Int'라고 쓴 이유는 우리가 취급할 데이터 형을 Integer로 정했기 때문이에요.

아까 Data 컨테이너의 Variable Type에서 앞에는 String, 뒤에는 Integer로 지정을 했는데요. String(문자열)형태의 이름표를 붙여서 Integer(정수)형태의 값들을 관리하겠다는 의미에요.

예를 들어볼까요?

우리가 관리해야 될 데이터 중에 콤보 최고기록 값이 있어요. 이 값을 Data 컨테이너에 이렇게 저장할 수 있어요.

Key = BestCombo

Value = 32

이렇게 저장한 다음부터는 Data 컨테이너를 불러서 BestCombo라는 Key를 넣으면 해당하는 Integer 값을 찾을 수 있어요.

8. 이제 함수를 구현해볼게요. 먼저 SaveIntData 함수를 여세요.

9. Data 컨테이너의 Get 노드를 만드세요. (변수와 똑같이 만들 수 있어요.)

10. Get Data 노드의 아웃풋 핀을 뽑고 Add 노드를 만드세요.

11. Add 노드의 아래 인풋 핀 두개를 함수 시작 노드에 올려놓는 방법으로 핀을 만드세요. 실행핀도 연결하세요.

Key, Value로 이름이 지어지는 것 알아채셨나요?

 

이 함수는 Key와 Value를 받아서 Data 컨테이너에 저장해요. 그런데 Data 컨테이너 안에 똑같은 Key가 있으면 어떻게 될까요?

정답은 새로운 값으로 덮어쓰기가 된다 입니다.

Add 노드의 주석(설명)에 의하면, 새로운 값으로 덮어씌워(will be overwritten)진다고 하네요.

12. LoadIntData 함수를 열고 아까처럼 Data 컨테이너의 Get 노드를 만드세요.

13. Get Data의 아웃풋 핀을 뽑아서 Find 노드를 찾아 만드세요.

14. Find 노드의 인풋핀을 뽑아서 함수 시작 노드에 연결해서 Key 핀을 만드세요.

15. 이번에는 Branch 노드를 만들고 Find 노드의 Boolean 아웃풋과 연결하세요.

Data 컨테이너 안에서 받아온 Key에 해당하는 Value가 있으면 True, 없으면 False가 실행됩니다.

16. 함수의 Return Node 노드를 두개 만들고, 아래처럼 노드망을 완성하세요. Save & Compile도 해주세요.

받아온 Key로 Value를 찾았을 때,

해당 Value + 값을 찾았다는 의미로 Boolean형 true를 반환

Value를 못 찾았을 때,

0 + 값을 못찾았다는 의미로 Boolean형 false를 반환


# 다음 장에서는

   게임 인스턴스

 

이번 장에서는 세이브게임 클래스를 만들어서 데이터 저장을 할 준비까지 해보았어요. 다음 장에서는 실제로 이 세이브게임 클래스가 어떻게 사용되는지 알아보겠습니다.