transform.position+= Vector3.Right
transform.position = Vector3.MoveTowards(transform.position, transform.position+Vector3.right, Time.deltaTime*movespeed);
Rigidbody2D.position += vector2.right
Rigidbody2D.velocity= vector2.right;
Rigidbody2d.MovePosition(transform.position+Vector3.right*movespeed*Time.deltatime);
이 정도를 사용 중인데, 현재 투사체를 움직이는 데 MovePositon방식을 사용하고 있었다.
문제는 Time.deltatime을 통해 움직임을 제어했는데도 불구하고 컴퓨터마다 속도가 다르게 찍혔다.
심지어 debug.log를 사용해 움직인 위치를 찍어보니 기기마다 이동한 위치가 달라졌다.
이상해서 하루종일 검색해보니 Rigid.moveposition 문서와 rigidbody2d.moveposition의 문서가 달랐다!
rigidbody2d.moveposition 문서에는 내용이 추가되어 있었는데,
Note: MovePosition is intended for use with kinematic rigidbodies.
kinematic rigidbodies에서 사용을 의도하고 작성된 함수였다.
현재 투사체들의 rigidBody는 전부 dynamic이어서 다르게 작동했던 것으로 보인다.
non-kinematic에서 moveposition을 사용하게 되면 일어나는 일에 대한 discussion이 있다.
unity discussion