본문 바로가기
관/핫한 닷지 프로젝트 게임개발

닷지 게임제작 기초 17(게임종료와 저장 편).

by 4차원 박스 2020. 7. 31.

게임매니저의 최종이다. 드디어 닷지의 끝에 다다른 것이다.

흥분을 가라앉히고 오늘은 게임을 종료하는 기능과 최고기록 저장의 기능을 구현한다.

아직 마지막 포스팅이 아니니 안심하자 퀄리티는 좀 더 높아진다!

 

<Endgame 함수를 구현한다>

1. 플레이어가 죽을때 실행

2. isGameover true

3. 게임오버 UI활성화, 최고기록 표시

 

이 함수는 게임매니저 스크립트가 아니라 플레이어 스크립트에서 호출할 것이다.

플레이어가 죽을때

PlayerController 스크립트에서 GameManager컴포넌트로 접근, Endgame 메서드 실행함

외부에서 접근가능하게 퍼블릭으로 설정함.

 

다음같이 코드를 작성 해준다. 

isGameover 를 참값으로 만들어 시간누적을 멈추고

게임오버텍스트 를 활성화 하여 게임오버 텍스트가 화면에 표시된다

그 후 최고기록을 recordText에 할당된 텍스트 컴포넌트로 표시하고 저장해야 한다.

 

최고기록 수치는 컴퓨터에 저장하여 프로그램 종료 후

유지하고, 나중에 다시 불러와 사용하는 처리는 PlayerPrefs로 구현할 수 있다.

(함정은 게임을 끄면 (Alt+F4) 기록이 날아간다 이건 어디까지나 게임을 계속 키고 있을 때만 저장되는 기록이다 ㅠㅠ 영구 저장방법은 다음기회에 다루도록 한다).

 

<PlayerPrefs>

플레이어설정, Player Preference 라 읽으며

간단한 방식으로 어떤 수치를 로컬(프로그램을 실행중인 현재 컴퓨터)에 저장하고

나중에 다시 불러오는 메서드를 제공하는 유니티에 내장된 클래스 이다.

 

PlayerPrefs 는 키-값 단위로 데이터를 로컬에 저장하고

값을 저장할때 사용할 키값이 뭔지 기억하고 있다면

나중에 같은 키값을 사용해 저장된 값을 다시 가져올 수 있다.

 

PlayerPrefs실수값을 저장할때는

PlayerPrefs.SetFloat() 메서드를 사용한다.

 

PlayerPrefs.SetFloat(string key, float value);

인자(argument)로 키와 키에 대응하는 값을 받는다.

 

또한 이전에 저장된 값을 불러올때

PlayerPrefs.GetFloat() 메서드를 사용한다.

이 메서드는 입력으로 값을 저장하는데 사용한 키를 받는다.

 

예를 하나 들어 이해해본다

 

게임의 골드와 점수를 저장한다 치고

이전에 로컬에 저장된 값이 없다, 즉 처음한다고 하면

키와 값이 전부 비어있는 상태이다.

이제 값을 저장하면

PlayerPrefs.SetFloat("Gold",30f);

PlayerPrefs.SetFloat("Score",50f);

이렇게 저장을 해준다.

 

현재 상태는


키      

Gold    30

Score   50


여기서 PlayerPrefs.SetFloat("Gold",100f);

을 하면


키     

Gold   100

Score   50


이렇게 된다.

즉 프로그램은 로컬데이터에 Gold라는 키가 미리 저장되어있는지

찾고 해당 키로 값이 저장되어 있다면 해당 키로 저장된 값을 새로운 값으로

덮어쓴다.

 

게임을 종료후 나중에 저장된 Gold값을 다시 가져오려면

다음 코드를 실행한다.

 

float gold = PlayerPrefs.GetFloat("Gold");

 

이제 이를 사용하여 Endgame메서드를 완성한다.

이렇게 완성을 한다.

float bestTime = PlayerPrefs.GetFloat("BestTime"); 이 한줄을 통해여

키값을 만들고 바로 0으로 초기화 할 수 있다.

 

이 메서드를 PlayerController 스크립트에서 불러오기로 하였으므로

PlayerController 스크립트에서 Die메서드를 다음과 같이 수정한다.

GameManager gameManager = FindObjectOfType<GameManager>();

이것으로 씬에서 게임메니저 타입의 오브젝트를 FindObjectOfType() 메서드를 이용하여

찾아서 GameManager타입의 gameManager 변수에 할당을 해준다.

 

이제 남은건 만든 스크립트를 오브젝트에 할당해주는 것이다.

게임매니저 스크립트는 게임매니저라는 오브젝트를 하나 만들어서

거기에 할당해준다.

또한 게임매니저 스크립트에서 텍스트오브젝트를 드래그드롭으로 처리해주면 완성이다.

다음포스팅은 허술한 현재의 닷지를 풍성하게 꾸며준다

댓글