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에서 실행해주면
캬~ 이궈궈던~ (게임 못하는 거 아님 아무튼 아님)
응애.. 머리 터져.. (머리야 터져라 아님 ㅎ)
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
a.. app e sang hae zim enter do an doem a e...
게임 하시는거 보니까...
뱁새바보

흥 일부러 죽은 거거던요타닥.. 타다닥..
게임만들어주세요.
ㅇ ㅏ rpg 만들고십다
미래가 기대되는 청년입니다. 화이팅!!

헉 감사합니다 선생님!1.16초랑 1.4초는 좀 에반디...
메이플 스킬은 어떻게 쓰는걸까.. 피지컬이 흠
뭐.. 뭐뭣?!!?
당신 용서치 않아..

우왕...뱁새님 멋지신!!!
라이츄쟝도 충분히 하실 수 있는 일..!