20일차 - SimpleMetaverse 2
▶▷ SimpleMetaverse
이번 주 동안 진행했던 프로젝트들을 바탕으로 하여 제작하는 개인 프로젝트로,
플레이어가 맵을 돌아다닐 수 있고 NPC에게 가면 미니게임을 할 수 있다.
현재까지 구현한 내용에 대해 순서를 정리해보자면 아래와 같다.
- 플레이어 이동 구현
- 애니메이션 및 애니메이터 구현
- 타일맵 배치
- NPC 구현
- 카메라 추적 기능 구현
- 미니게임 구현
- 미니게임 시작 화면, 결과 화면 구현
- 게임 점수 및 최고점수 갱신 결과 반영
- 메인 씬과 미니게임 씬 연결
메인 씬은 앞에서 제작했던 TopDown의 로직을 참고하였다. 플레이어의 이동과 관련해서 다른 에셋을 사용하려다 보니 기존의 에셋과 다르게 상하좌우가 모두 나눠져 있는 에셋이라 이동 로직을 아예 새롭게 바꿔보기도 했다가 다시 에셋을 바꿔서 기존의 로직을 참고해서 다시 구현해보기도 하고 왔다갔다를 많이한 것 같다.
미니게임은 Flappy Plane을 이용했고 TheStack의 점수 저장 및 갱신 기능을 참고해서 추가하였다.
내일은 NPC와 대화, 점수에 기준을 두어 성공 및 실패 여부 결정 등의 기능을 추가하고 마무리 할 예정이다.
▶▷ 트러블 슈팅
막히는 부분:
1. 점수를 저장하는 과정에서 점수에 관한 변수를 int로 선언했는데 UI에 점수 정보를 넘겨줄 때 string으로 넘겨주어야 해서 오류가 생기는 현상
2. 미니게임을 시작했을 때 장애물 생성 위치가 너무 멀리 생성되는 현상
3. 미니게임을 마치고 메인 씬으로 돌아왔을 때 캐릭터가 느리게 움직이거나 아예 움직이지 않는 현상
시도한 방법:
1-1. int로 선언했던 점수를 string으로 바꿔서 호출 해보려고 시도
1-2. 강의에서 봤던 PlayerPrefs로 저장해서 전달해보려고 시도
2-1. 오브젝트를 생성할 때 트랜스폼을 리셋하지 않았는지 확인
2-2. Obstacle 스크립트에서 랜덤 생성 범위 값을 잘못 지정했는지 확인
3-1. 씬 이동 관련해서 잘못 작성된 코드가 있는지 확인
해결:
1. PlayerPrefs를 이용하여 로컬에 점수를 저장한 다음 UIManager 스크립트에 결과창 전용 점수의 변수를 만들어 해당 부분에 텍스트 오브젝트 할당 후 문자열 형태로 바꾸어 점수 전달
2. Obstacle 스크립트가 장애물 프리펩에만 컴포넌트로 추가되어야 하는데 장애물 오브젝트에도 추가되어 있어서 문제가 생긴 것을 확인하고 해당 컴포넌트 삭제
3. 미니게임 시작 화면이 활성화 될 때 Time.timeScale = 0, 게임 오버 화면이 활성화 될 때 Time.timeScale = 0.3으로 설정 해둔 부분을 원래대로 돌리기 위해 씬을 이동하는 메서드에 Time.timeScale = 1로 되돌리는 로직 추가