EasyCastleUNITY

길건너 친구들 모작 개발일지8 (플레이어 점수 측정, UI 표시) 본문

3D 프로젝트 개발 일지(Crossy Road, 한글명: 길건너 친구들)

길건너 친구들 모작 개발일지8 (플레이어 점수 측정, UI 표시)

EasyCastleT 2023. 10. 5. 14:47

기본적인 맵 생성 및 장애물 생성을 마치고,

이제 플레이어 이동을 통해 점수와 먹은 코인을 저장하고 UI로 보여주어 보겠습니다. 

이 처리들을 충돌감지를 통해 만들어 보겠습니다. 


땅과 충돌하면, 포인트 증가

Player의 스크립트 일부, 충돌처리부분

물리적으로 충돌을 하면, 플레이어 조작의 문제가 발생합니다. 

따라서, 물리적으로 충돌말고, Trigger를 사용하여 충돌을 검사합니다. 

 

Ground 태그는 모든 땅들에 부여되어 있습니다. 그리고 옆이나 뒤로 갔을 때, 포인트를 획득하면, 안되므로

플레이어의 이동방향을 저장하고 있는 moveDir이 forward 즉, 앞으로 이동하는 것이 아니라면, 포인트 처리를 하지 않게 하였습니다. 

 

이 포인트는 플레이어에서 처리하는 것이 아니라, 대리자를 호출하여, 충돌 이벤트가 발생했다는 것을 GameMain에 전달합니다. 

GameMain에서 onPoint 대리자 처리부분

그리고 이 전달받은 대리자를 통해, GameMain의 변수 point를 증가시킵니다. 

 

이렇게 점수증가를 구현했습니다.


코인과 충돌하면, 포인트 증가

코인도 점수증가와 비슷하게 코인과 충돌하면 플레이어가 대리자를 호출합니다. 

그리고 GameMain에서 실행하여

GameMain의 변수 coin을 증가시킵니다. 


UI를 통해 보여주기

Canvas에 각각의 Text txtCoin과 txtPoint를 만들고 GameMain에 부착하였습니다. 

그리고 GameMain에서 위에서 증가한 변수의 값을 각각의 text에서 보여주도록 했습니다. 

Update에서 계속 호출
시연 결과

점수 증가 방식 조건 추가

하지만, 단점이 있는데 바로 뒤로 돌아갔다가 다시 앞으로 오면 점수가 올라간다는 것입니다. 

그래서 각각의 땅들에 GroundPlayerCheck라는 스크립트를 부여하여, 한번이라도 플레이어와 충돌한 적이 있다면, bool 변수를 true로 하도록 만들었습니다. 

그리고 Player 스크립트에서 

조건을 추가하였습니다. 

부딫친 땅에 GroundPlayerCheck에 접근하여 isCheck 변수가 false인지 확인

플레이어의 이동방향이 정면이고, 부딫친 땅에 bool 변수가 false 일때만 대리자를 호출합니다. 

그래서 한번 충돌처리했을 때는, 아직 isCheck 변수가 false이기에 대리자가 호출되지만, 

한번 충돌처리한 이후에는, isCheck 변수가 true로 변해, 이미 충돌한 땅과 다시 충돌해도, 대리자를 호출하지 않아

GameMain의 point 변수의 값은 증가하지 않습니다. 

 

이렇게 점수 및 코인 증가 로직과, ui 구현을 마쳤습니다.