유니티 2D 플래포머에서 점프버그 발생
문제상황
Player 캐릭터가 점프키를 아주 짧게 누르거나, 지형이 끝나는 곳에서 점프를 시도할 시
캐릭터가 의도했던 높이만큼 점프를 하지 못하는 버그
문제원인분석
Player에서부터 땅과의 수직벡터 방향으로 RayCast 메서드로 Ray를 발사하여 Player가 땅에 닿았는 지를 체크한다.
- Player가 땅에 닿아있고, Player에 달려있는 RigidBody2D 컴포넌트의 velocity.y값이 -0.1f보다 크면 bool IsGrounded 변수가 true가 된다.
- velocity.y의 값을 추가적으로 확인하는 이유는 플레이어가 점프키를 꾹 누르고 있으면, 땅에 닿기전에 다시 점프메서드에 포함되어있는 AddForce가 동작하여 마치 플레이어가 둥둥 떠다니는 것 처럼 되기때문이다.
-
IsGrounded변수가 true일때, 플레이어에게 할당되어있는 Jump키를 누르면 플레이어 컴포넌트의 RigidBody에 AddForce를 가하여 점프하는 듯한 동작을 한다.
-
AddForce는 한 번에 힘을 받는 것이 아닌, 프레임단위로 힘을 받아 충격량을 축적하기때문에 AddForce로는 원하는 점프동작을 구현할 수 없는 듯하다.
시도방법
- Jump키를 누르면 일정시간동안 IsGrounded가 true인 상태로 유지된다.
- 해당방법은 IsGrounded가 유효한 시간에 따라서, 특정지형지물에서 원치않는 동작을 유발할 수 있었다.
- Jump키를 누르면 점프딜레이 시간을 주어 해당 시간동안 RigidBody의 AddForce를 일정시간동안 수행한다.
- 마찬가지로 특정 지형지물에서 너무 높게 점프하는 문제가 생겼다. 또한, 평지에서와 지형이 끝나는 부분에서 점프가 일정하게 되지 않는 것은 동일했다.
해결방법
- 플레이어의 점프동작을 AddForce가 아닌 rb.velocity = Vector2; 방법으로 부여하면, 플레이어가 점프키를 누르면, 곧바로 플레이어의 속력은 Vector2가 되어 의도한대로 동작하게 된다.