본문 바로가기
게임 개발 일지/내일배움캠프 TIL

3D 플랫폼 게임 - Ray 값을 이용한 점프 구현

by 빛하_ 2023. 12. 21.

 

 

Unity_3D Team Project
3D 퍼즐 레이싱 게임 만들기

 

Player 의 Jump 오류 수정

 

Player는 PlayerController.cs 를 통해 Jump를 할 수 있다.

여기서 IsGrounded 라는 Bool 값을 이용해 땅에 닿았을 때에만 점프를 1회 할 수 있도록 취한다.

즉, IsGrounded가 false라면, player는 jump를 할 수 없다.

 

그런데 레벨 테스트 도중 player가 특정 구간 obstacle에 닿았는데도 점프가 되지 않는 현상이 발생했다.

점프는 이 게임에서 퍼즐을 수행하기 위한 중요한 기능이기 때문에 절대 오류가 나서는 안 된다.

 

PlayerController.cs 에서 점프와 관련된 수치를 조정해보아도 여전히 특정 obstacle에서 점프가 불가능했다.

그렇다면 특정 obstacle에 문제가 있는걸까?

 

해당 obstacle의 collider, rigidbody 등을 둘러보아도 크게 문제되는 것은 없었다.

그래서 Unity의 Scene뷰를 통해 Player가 obstacle의 어떤 위치에 닿으면 문제가 생기는지 보기로 했다.

player의 발이 obstacle의 표면 일부에 조금 박히는 일이 발생한다.

 

해답은 여기에 있었다.

우리의 눈으로 보기에는 player가 obstacle의 표면에 잘 붙어있다고 생각했지만, 실제로는 그렇지 않았다.

사실 발이 바닥에 붙은 것은 맞지만 '너무 붙은 것'이 문제였다.

 

왜냐하면 bool IsGrounded를 판별하기 위해 player 발에서부터 ray값을 지면으로 발사하고 있기 때문이다.

 

ray값이 너무 낮은 위치에서 시작된다면 (지면보다 아래에서) ray가 지면을 인식하지 못한다.

따라서 이렇게 발이 obstacle을 조금 통과하더라도 IsGrounded를 판별하려면

조금 더 높은 위치에서 확실하게 ray를 쏘아주면 된다.

 

원래 0.01f 였던 ray값을 0.1f 로 조정하니 obstacle의 어떤 위치에서도 오류 없이 jump가 작동했다.

 

 

내일 발표도 파이팅!!

 

 

 

 

 

 

댓글