본문 바로가기

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

30. 브러쉬유: 게임 인스턴스(Game Instance)와 데이터 저장

 

 

# 이번 장에서는

   게임 인스턴스(Game Instance) 클래스의 등장

 

이번 장에서는 게임 인스턴스(Game Instance)라는 것을 만들거예요. 게임 인스턴스는 게임이 시작할 때 만들어져서 게임이 종료될 때 까지 프로그램 상에 존재하는 친구에요. (Open Level 등으로 Lobby ↔ GameLevel 레벨을 이동할 때 GM_Game, PC_Game, Chameleon, Master(위젯) 등은 모두 메모리에서 지워져요.)

이번 장에서 우리는 프로그램이 종료될때 까지 살아있는 게임 인스턴스 안에 중요한 데이터들을 저장하고, 또 그것을 꺼내서 사용하는 로직을 구현할거예요.

게임 인스턴스는 공식문서 페이지도 없고 딱 이거다 싶은 레퍼런스가 없네요. 그냥, 프로그램 종료할 때 까지 살아있기 때문에 중간에 잃어버리면 안되는 데이터를 저장하기에 좋은 공간이라고 생각하셔도 무방해요.

 


# 게임 인스턴스 클래스 만들기

 

1. Blueprints > Framework 폴더에 새로운 블루프린트 클래스를 만드세요.

2. All Classes 검색창에 GameInstance를 쳐서 GameInstance를 선택하세요.

3. 이름은 GameInstance의 약자인 GI로 지으세요.

4. Project Settings에 들어가서 Game Instance Class를 찾으세요.

직접 찾으려면 Project > Maps & Modes 항목으로 가시면 됩니다.

5. Game Instance Class를 GI로 바꾸세요.

이제 게임 내에서 GI 클래스로 만든 게임 인스턴스가 사용될거예요.


# 데이터를 저장할 변수 만들기

 

게임 인스턴스에 어떤 데이터를 저장하는게 좋을까요? 앞으로 게임 구현에 따라 얼마든지 추가될 수는 있겠지만 현재로서는 Best Combo를 저장하면 좋을 것 같아요.

이곳에 표시할 숫자 데이터

 

왜냐하면 이 베스트 콤보 데이터는 로비로 나갔다 오거나, 게임을 다시 시작하기 위해 레벨을 이동하더라도 그대로 남아있어야 하기 때문이에요. 자 그럼 작업을 시작해 볼까요?

1. GI 블루프린트를 여세요.

2. Variables 목록 이름 옆 + 버튼을 눌러서 Integer형 변수를 하나 추가하세요. 이름은 BestCombo로 지으세요.

3. Compile & Save 하고 GI를 닫으세요.


# BestCombo 데이터 가져오기/저장하기

   Master 위젯에서

 

이번에는 Master 위젯에서 작업을 하겠습니다.

게임 종료시에 이번 판의 MaxCombo 데이터와 GI에 저장된 BestCombo 데이터를 이용해서 GameOver 위젯의 BestCombo 텍스트를 업데이트할게요.

1. Master 위젯을 여세요.

2. Graph 모드에서 Custom Event를 하나 만들고, UpdateCombo로 이름지으세요.

3. 기존 노드를 조금 수정할게요. ReduceLife 이벤트 노드에 연결된 노드들 중 아래 표시된 부분(SetText 노드와 입력핀에 연결된 노드들)을 떼서 UpdateCombo 이벤트 노드에 붙이세요.

 

4. UpdateCombo 이벤트 호출 노드를 검색해서 3번에서 떼어낸 자리에 연결하세요.

5. 이번에는 이벤트의 이름을 변경할게요. ReduceLife 이벤트의 이름을 OnFailure로, AddCombo 이벤트의 이름을 OnSuccess로 바꾸세요.

 

이벤트의 역할을 좀 더 명확하게 전달하기 위한 작업이에요.

6. 다시 UpdateCombo 이벤트로 돌아와서, Get GameInstance 노드를 만드세요.

7. Get Game Instance 노드의 Return Value 핀을 뽑아 들고 Cast To GI 노드를 찾아 만드세요(GI로 검색하면 바로 나와요). 노드망은 아래와 같이 만드세요.

GI로 형변환을 마쳤기 때문에 우리가 GI 블루프린트 안에 선언한 BestCombo 변수를 가져올 수 있어요.

8. As GI 핀을 뽑아 들고 Get BestCombo 노드를 찾아 만드세요.

9. 이제 MaxCombo와 비교를 해야겠죠. Get MaxCombo 노드를 만드세요.

10. 대소비교( < ) 노드와 Branch 노드를 만들고 아래와 같이 연결하세요.

GI에서 불러 온 BestCombo 변수의 값이 MaxCombo 변수의 값보다 작다면, BestCombo를 교체해주어야 해요.

11. As GI 핀을 다시 한번 뽑아들고 Set BestCombo 노드를 찾아서 만드세요.

12. Get MaxCombo 노드를 하나 더 만들어서 Set BestCombo 노드 입력핀에 연결하세요.

변수 값의 교체는 끝났어요. 이제 위젯에 표시하는 작업을 해야겠죠?

13. GameOver 위젯의 Get 노드를 만들고 Get TextBestCombo 노드까지 만드세요.

두번째 노드는 핀 뽑아서 검색하는거 잊지 마세요.

14. Get TextBestCombo 노드의 아웃풋 핀을 뽑고 SetText (Text) 노드를 찾아서 만드세요. 노드망은 아래처럼 연결하세요.

15. SetText (Text) 노드의 In Text 인풋 핀에 BestCombo 변수의 값을 넣으세요.

*ToText (integer) 노드에서 Minimum Integral Digits의 값을 2로 설정하세요.

16. Branch 노드의 False 실행핀은 바로 SetText (Text) 노드에 연결하세요.

17. 전체 노드망을 확인하고 Compile & Save 하세요.

18. 테스트 해보세요.

재시작 버튼으로 레벨을 다시 열거나, 홈 버튼을 눌러 로비로 나갔다가 들어와도 Best의 값이 남아있다면 성공이에요.

* 프로그램을 아예 꺼버리면 데이터는 날아가요. 프로그램을 끄더라도 데이터가 날아가지 않게 만드는 작업은 이후에 진행할게요.


# 다음 장에서는

   브금과 효과음 배치하기

 

다음 장에서는 옵션 창 UI를 만들기 전에 브금(배경음악)과 각종 효과음을 배치하는 방법을 알아보겠습니다. 30장까지 따라와 주셔서 감사합니다. 공감과 응원 댓글 및 피드백은 저에게 큰 힘이 됩니다.