일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- jwt
- 유니티
- oAuth
- frontend
- MongoDB
- 게임개발
- 스프링부트
- IntelliJ
- 스프링
- Python
- AWS
- 프로그래밍
- react
- unity
- 게임
- express
- OAuth2.0
- 깃
- springboot
- 코딩
- spring
- 백엔드
- bcrypt
- 파이썬
- netlify
- c#
- JSON
- 백준
- node.js
- RiotAPI
- Today
- Total
Unwound Developer
유니티 - 2D런게임, PlayerPrefs 와 Slider 본문
레트로 유니티 교재를 따라만든 2D 런 게임이 있었는데, 그냥 연습용으로 지나친 프로젝트였기에,
정말 게임이라 보기에는 미흡한 점이 많습니다.
그래서, 교재를 끝마치고 첫번째로 하고 있는 것은 2D 런 게임, 이른바 '유니런'의 수정입니다.
새로운 프로젝트를 진행하는 것도 게임개발 학습에 많은 도움이 되겠지만
기존에 진행한 프로젝트를 수정 보완해 나가는 것도 그 만큼 도움이 될거라 생각했어요.
실제로 지금 수정,보완을 해보면서 교재에서 다루지 않았던 부분들도 많이 깨닫고 있습니다.
수정을 진행하면서 사용했던 유니티나 C#의 클래스,메소드 등의 기능들은 따로 정리해보려 합니다.
우선, 현재까지 보완한 게임의 모습이에요.

우선 타이틀 화면입니다.
기존에는 실행하자 마자 바로 게임이 시작되어서 불편했기에 이 점을 수정했어요.
아무리 하이퍼 캐주얼이라 해도, 아무 말없이 시작하지는 않는 것 같아요....ㅎㅎ
게임 진행시와 마찬가지로 뒤에 배경은 움직입니다. bgm또한 재생되구요.

다음은 오른쪽 상단 옵션 버튼을 눌렀을 시 나오는 화면이에요.
Slider를 이용해 BGM과 캐릭터의 사운드 크기를 조절할 수 있습니다.
이 때, 변경한 옵션은 Playerprefs 클래스를 통해 변경한 수치를 로컬에 저장했어요.
나중에 게임을 다시 켰을 때, 변경한 옵션이 유지되어야 한다고 생각해서 그랬습니다.
게임을 재실행 할때마다 옵션이 초기화되면 불편하니까요.

PlayerPrefs에 키워드와 함께 값을 넘겨주면 로컬에 값을 저장하게 됩니다.
위 코드는 캐릭터의 사운드를 조절하는 슬라이드의 스크립트입니다.
슬라이드를 조절해서 값이 변경될 때마다 On Value Changed가 실행되는데, 이 때 setVolume 메소드를 실행합니다.

이 때, setVolume에는 자동으로 슬라이더의 값이 파라메터로 전달됩니다.
슬라이더는 가장 왼쪽이 0, 가장 오른쪽이 1이에요.
그리고, 받아온 volume값을 "태그"라는 이름의 태그로 로컬에 저장한 후
로컬에 저장한 값을 불러오고 싶을 때, PlayerPrefs.GetFloat("태그") 하면 값을 불러와요.
이렇게 슬라이더를 통해 변경한 볼륨을 로컬에 저장하고 불러오는것으로 구현했습니다.

게임 화면은 거의 비슷한데, 일단 옵션 창은 동일하게 오른쪽 상단에 버튼이있어요.
이 때, 옵션창이 나타나면 게임이 일시정지가 됩니다.
그리고, 원래는 2단점프까지가 끝이었는데, 이게 너무 어려운 것 같아서
쉬프트를 누르면 최대 1초동안 공중에 머무를 수 있는 기능을 추가했어요.

공중에 떠있는 상태로 쉬프트를 누르면, 누르고 있는 동안 Rigidbody의 velocity(속도)를 영벡터로 만듭니다.
쉬프트를 떼면 다시 떨어져요.
flyCount에 deltaTime을 더해서 최대 1초까지만 날 수 있도록 조정했어요.
캐릭터에 땅에 닿으면 flyCount를 다시 0으로 만들어서 다시 비행 기능을 충전해요.

죽게되면, 오른쪽 상단에 베스트스코어가 표시됩니다.
베스트 스코어도 아까 옵션과 마찬가지로 PlayerPrefs를 통해 저장합니다.
게임을 껐다켜도 베스트스코어는 그대로 유지됩니다.

그리고, 무료 사운드 에셋을 사용해 땅을 밟고 뛰는동안 풀밭뛰는 소리가 나도록 했어요.
캐릭터가 땅에 닿아있는지 체크한 후, 땅에 닿아있다면 playerAudio의 클립을 풀밭소리로 바꿉니다.
Time.time > lastRunSound + runSoundDelay는 0.2초마다 소리가 나도록 설정했어요.
runSoundDelay라는 변수를 0.2로 초기화한 후, 게임이 진행된 시간 > 마지막으로 소리가난 시간 + 0.2초가 되는 순간
소리를 재생하면 0.2초마다 소리가 재생됩니다.
우선 이 정도를 수정했는데, 별거아닌 기능들인것 같은데, 책에 없는 내용을 찾아가며 구현하느라 시간이 오래걸렸네요.
이제 게임내의 이벤트같은 것들을 추가해려구요.
'Unity > Unity, C#' 카테고리의 다른 글
유니티 - 슈퍼마리오 카메라 (0) | 2022.01.28 |
---|---|
Unity - 2D 런 게임, 추가/변경사항 (0) | 2022.01.24 |
유니티 - 2D 런 게임, 자동으로 발판 생성하기 (0) | 2022.01.12 |
유니티 - 2D 런 게임, 싱글턴 GameManager (0) | 2022.01.12 |
유니티 - 2D 런 게임, ScrollingObject (0) | 2022.01.12 |