출처 : https://blog.naver.com/kbh3983/223255473776
MovePosition을 사용할 때 up down left right arrow 를 누를 때 마다 0.01씩 추가하거나 뺀다고 하면 벽을 만나서 움직이지 않는 경우에도 내부적으로는 카운터가 계속 더해지고 있다.
예를 들어 위에 있는 벽을 만났을 때 10번 위 화살표 버튼을 누르면 내부적으로는 이미 포지션이 0.01*10 = 0.1 까지 올라가 있는 상황이 되고 이 때 우측으로 이동하여 벽에서 나오는 순간 갑자기 10칸 위로 0.1위치로 이동한다.
이를 방지 하기 위해서 현재 위치 + up down left right arrow 를 눌렀을 때 0.01 씩 이동을 사용하게 되면 벽에 막혔을 경우 매 프레임마다 현재 위치 + 0.01 을 하게 되는데 0.01이 더해져도 다음계산시에는 현재 위치가 벽에 막혀서 움직이지 않았기에 계속해서 현재 포지션으로 초기화 된다. 이 상황에서 벽을 빠져 나와도 현재 포지션 기준으로 이동을 하기 때문에 순간 이동이 발생하지 않는다.
그래서 아래와 같이 Rigidbody.Position + curVector 를 사용해서 이동하게 된다.
playerRigidbody.MovePosition(playerRigidbody.position + moveDistance);
댓글 없음:
댓글 쓰기