Unity

[Unity] rigidbody.MovePosition과 rigidbody.Position 그리고 transform.Position 차이 (부제: 쯔꾸르식 플레이어 이동)

대왕휴지 2023. 1. 2. 04:27

 

2D 게임을 제작하던 중, Player의 콜라이더가 상대의 콜라이더에 닿였을 때 덜덜 떨리는 현상이 있었음.

이 현상을 없애고 싶어서 열심히 구글링을 하던 중, rigidbody.MovePosition이라는 것을 처음 봤음.

 

그래서 찾아보니깐, 매우 쓸모가 많을 것 같아서 적어봄.

(여러 블로그 참고해서 짬뽕해서 적음. 내가 나중에 보는 것이 목적이기 때문에 포스팅이 구릴 수 있음.)

 

참고한 블로그는 아래에 적어두겠음. 내 허접이 블로그보다 다른 천재 블로그들의 글을 읽는 것이 더 좋을 것...

 

일단 해결한 코드!!.


transform.Position와 rigidbody.Position의 차이

transform.Position

오브젝트의 위치가 즉시 이동. 그 후에, 연결된 모든 콜라이더들이 rigidbody의 위치를 다시 계산을 함.

rigidbody.Position

물리엔진이 적용된 리지드 바디를 얻을 수 있음.

rigid.Position을 이용하여 위치 변경한다면, 시뮬레이션 계산 후에 위치(transform)가 변경됨

 

 

유니티 공식 문서에 따르면, rigid.Position을 이용하는 것이 Transform.Position을 사용하는 것보다 빠르다고 함

Transform.Position은 부착된 모든 콜라이더가 rigidbody의 위치를 다시 계산을 하기 때문.

(10배 이상 빠르다고 함;;)

 

암튼 rigid.Position으로 지속적으로 움직이려면 MovePosition을 이용하라고 적혀있음.

 

rigidbody.MovePosition

rigidbody.MovePosition을 이용하여 이동

리지드 바디를 이용하여 보간을 사용하며 이동하고 싶으면, MovePosition을 사용하면 됨.

 

매프레임 렌더링 사이에 자연스러운 이동을 할 수 있음.

 

transform.position 보다 RigidBody.MovePosition 이 더 부드럽게 이동함. 

그 이유는 Rigidbody의 Interpolate 때문이다.

http://egloos.zum.com/metashower/v/9660975

(다른 지점으로 순간이동하고 싶으면, 그때 transform.position을 사용하면 됨.)

 

 

암튼..

transform.Position을 계속해서 이동할 바엔 MovePosition을 사용하자~

 

 

 


참고 블로그

https://docs.unity3d.com/ScriptReference/Rigidbody-position.html?_ga=2.7991866.983488121.1592899126-1242173254.1590848335

 

Unity - Scripting API: Rigidbody.position

Rigidbody.position allows you to get and set the position of a Rigidbody using the physics engine. If you change the position of a Rigibody using Rigidbody.position, the transform will be updated after the next physics simulation step. This is faster than

docs.unity3d.com

https://sensol2.tistory.com/10

 

[유니티 궁금증] transform.position과 rigidbody.position 의 차이

오브젝트의 위치를 변경하고 싶을때 position 값을 바꾸게 된다. 그런데 rigidbody가 적용된 오브젝트를 움직일 때 궁금증이 생겼다. transform.position과 rigidbody.position를 각각 수정해보았더니 두 값 모

sensol2.tistory.com

https://godnr149.tistory.com/68

 

MovePosition

RigidBody . MovePosition (Vector3 position) target 지점이 되는 position 으로 RigidBody를 이동시킨다. transform.position 보다 RigidBody.MovePosition 이 더 부드럽게 움직이게 해준다. ( RigidBody의 Interpolate 옵션 때문 ) ( Ref

godnr149.tistory.com

https://blog.naver.com/sabotduke/220802330662

 

[유니티]Rigidbody. position과 MovePosition()의 차이와 성능. 그리고 결론?

스크립트 최적화에 간단히 쓸 생각이었다가 깜박 잊었다. 처음 유니티 배울 때 position과 MovePosition(...

blog.naver.com