플레이어가 가끔씩 오브젝트에 끼거나 AddForce() 메서드에 의한 힘을 잘 받지 않는 등의 문제가 오늘 발생했다.
그래서, 오늘은 이를 해결하는 방법에 대해 고찰해 보았다.
보통 플레이어의 이동을 사용할 때는 위치 값을 직접 변경하거나, 위치 값을 변경해주는 메서드를 사용하거나, Rigidbody의 속도 값을 사용할 것이다.
그런데, Rigidbody의 속도 값을 고정하게 되면, 외부의 힘을 받았을 때, 다시 그 속도로 덮어씌워 지게 되기 때문에
나 또한, 이번 과제에서 속도 값을 사용하다 보니, 오브젝트에 끼이거나 다른 외부 힘을 받아들이지 못해서 이를 아래와 같이 바꾸어 보았다.
void Move()
{
Vector3 dir = transform.forward * moveDir.y + transform.right * moveDir.x;
dir *= playerInfo.Speed * Time.fixedDeltaTime;
rigid.MovePosition(rigid.position + dir);
}
보통 위치 값을 조정하거나 Vector3.MoveTowards()를 사용하여 수정을 하지만, 이번에는 Rigidbody의 MovePosition을 사용해 보았다.
이를 사용하면, 물리적인 위치 값을 사용하기 때문에 더 안정적으로 위치 수정이 가능하여 사용해 보았다.
이를 사용하니 외부에 힘도 잘 받아들이고 오브젝트 끼임 현상도 많이 줄어들었다.
플레이어에게 외부적인 물리 힘을 줘야 하는 프로젝트에서는 Rigidbody의 MovePosition을 사용해 보자!