뱁 새 |ૂ•ᴗ•⸝⸝)” [1127282] · MS 2022 · 쪽지

2023-12-26 12:11:06
조회수 1,394

PlayerPrefs에 관하여

게시글 주소: https://orbi.kr/00066149595

안녕하세요 뱁새입니다 (۶•<•)۶❗️


오늘은 게임을 끝내는 방법과 최고기록을 나타내는 방법을 구현하는 과정에 대해 정리해보도록 하겠습니다

 

그럼 가봅쉬다❗️





첫 번째, endPanel 제작.


우선 이 게임을 끝내기 위해서는 장애물이 balloon에 닿아야 하고

게임이 끝났을 경우 스코어가 기록되는 판이 등장해야 합니다


가장 먼저 판부터 만들어봅시다



endpanel 내부에 들어갈 개체들을 만들어주고 txt의 위치를 적절히 조절해준 후

retryButton에 button 요소를 부여해줍니다



그러면 위와 같이 Target Graphic 밑에 경고 문구가 뜨는데 이는 그래픽 타겟을 지정하지 않았을 경우

버튼을 눌러도 버튼 색의 변화가 없어 내가 버튼을 눌렀는지 안 눌렀는지 알기 힘드므로 지정하라는 의미를 지닙니다



그러니 컬러 틴트를 주기 위해 Image를 Target Graphic으로 설정해주도록 합시다



그런데 endPanel은 게임이 끝났을 경우에만 등장해야 하는 개체이므로 위의 체크박스를 해제해 비활성화를 시켜줍니다




두 번째, endPanel 나타나게 하기.


게임이 끝났을 때 endPanel이 나타나게 하려면 어떻게 하여야 하는지 살펴보겠습니다



먼저 gameManager를 싱글톤 처리해주어야 하는데요


* 싱글톤 : 어떤 오브젝트가 프로그램에 단 하나만 존재하고, 어느 곳에서도 쉽게 접근 가능한 것을 의미


싱글톤 처리는 public과 void Awake() { I = this;} 를 이용해 다른 cs에서 I인 gameManager를 호출할 수 있도록 하면 됩니다!



싱글톤 처리가 완료되었다면 gameManager.cs에 게임을 종료시키는 코드("balloon" 이라는 태그를 가진 게임 오브젝트가 충돌하면 게임을 끝내줘! 라는 의미를 담음)를 작성해주고 



public GameObject endPanel;을 작성해 gameManager에게 endPanel을 사용할 것이라 알려준 후 저장해줍니다



이후 Unity로 돌아와 gameManager를 클릭하면 endPanel을 손에 쥐어달라 부르짖는 처량한 모습을 보여줍니다



옛다 먹어라. 




gameManager : 



다음으로 balloon 태그까지 붙여주면 게임 종료 코드가 정상적으로 작동됩니다




세 번째, 현재 스코어 보여주기.


게임이 종료되었을 때 현재 스코어가 나타나도록 하려면 



gameManager에게 thisScoreTxt를 사용할 것이라 알려주고

게임이 종료되었을 때 thisScoreTxt가 소숫점 둘째자리까지 기록이 되도록 코드를 작성해주면 됩니다



이후 gameManager에게 thisScoreTxt를 쥐어주고 실행해보면 



현 스코어가 잘 기록이 되고 있음을 볼 수 있습니다




네 번째, retry 함수 작성.


게임은 정상적으로 끝나는 것을 확인했는데 한 가지 문제가 있네요

그건 바로 retry 버튼이 동작하지 않는다는 것인데 이는 retry 함수를 작성해 해결하면 된답니다



retry 함수도 이전과 마찬가지로 gameManager.cs에서 코드를 작성하면 되는데

위 코드는 "retry 호출 시, MainScene으로 화면 전환을 하고 시간이 다시 흐르게 해라." 라고 해석할 수 있습니다



이후 다시 Unity로 돌아와 retryButton에 우리가 만들었던 retry 함수를 넣어주면 



retry 버튼이 정상 동작하게 됩니다




다섯 번째,  스코어 간 시간차 해결하기.


바로 위의 움짤을 보면 endPanel 내 현 스코어와 MainScene 내 현 스코어에 차이가 있음을 확인할 수 있는데

이러한 현상이 발생하는 이유는 thisScore가 기록되는 도중에도 게임은 계속 업데이트가 되고 있기 때문입니다


 

이 현상을 해결하기 위해 이렇게 코드를 작성해주면(만약 게임이 진행 중이면 시간이 흐르도록 해주고 게임 오버가 되면 게임 진행을 멈춰달라는 의미를 지님) gameOver가 호출되었을 때 게임 진행 자체가 정지되므로 게임의 업데이트가 더 되지 않아 시간차가 발생하지 않습니다




여섯 번째, PlayerPrefs를 이용해 최고기록 나타내기.


게임이 끝났을 때 최고기록을 나타나게 하는 경우는 두 가지가 있습니다


첫 번째, 플레이 한 판이 첫 번째 판일 때

두 번째, 첫 번째 판보다 더 오래 버텼을 때


이것은



이렇게 구상을 해볼 수 있는데요


이것을 구현하려면 데이터를 저장하고 불러올 수 있도록 하여야 하는데 이는 PlayerPrefs를 이용하면 됩니다


* PlayerPrefs



그럼 위에서 구상한 것을 토대로 코드를 작성해봅시다!



맨 윗줄부터 해석해보면 만약 bestScore 값이 존재하지 않으면 / 현 스코어를 bestScore로 저장하고 /

bestScore 값이 이미 존재하고 현 스코어가 bestScore 값보다 크면 / 현 스코어를 bestScore로 저장해라

라는 의미가 됩니다!


이제 이를 저장하고 Unity에서 실행해주면



캬~ 이궈궈던~ (게임 못하는 거 아님 아무튼 아님)




응애.. 머리 터져.. (머리야 터져라 아님 ㅎ) 

rare-더 귀여운 비둘기

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.