물체의 이동을 처리할 때, 힘 (Force) 은 물리 공간에서 발생하는 사건이기 때문에 월드 좌표계를 기준으로 계산되며, 이동이나 회전은 (transform) 은 물체 자신의 움직임 이므로, 로컬 좌표계를 기준으로 계산됩니다. 이러한 개념을 이해하면 코드를 작성할 때, 한결 자연스러워질 것입니다.
AddForce 는 월드 공간 기준이다
AddForce()는 "물리 엔진이 계산하는 힘(force)" 을 오브젝트에 적용하는 함수입니다.
그리고 이 힘은 항상 월드 좌표계 기준으로 작동합니다.
rb.AddForce(Vector3.up * 10f);
이 코드는 "월드에서 위쪽 (0,1,0) 방향으로 힘을 준다" 는 뜻입니다.
즉, 오브젝트가 아무리 회전해 있어도, 항상 똑바로 위로 날아갑니다.
로컬 방향으로 힘을 주고 싶다면?
만약, 비행기 오브젝트가 회전하면서 "자기 기준으로 위쪽" 방향으로 힘을 주고 싶다면, transform.up 을 써야 합니다.
rb.AddForce(transform.up * 10f);
이 코드는 오브젝트가 보고 있는 방향 기준의 "위쪽" 으로 힘을 줍니다.
즉, 회전 방향에 따라 힘의 방향도 바뀌는 것입니다.
AddRelativeForce 란?
AddRelativeForce() 는 함수 이름에서 알 수 있듯이, 로컬 좌표계 기준으로 힘을 주는 함수입니다.
따라서, Vector3.up ( 월드 공간상에서의 위쪽 방향 ) 을 AddRelativeForce() 함수 ( 물체 공간으로 변형한 힘 ) 의 매개 변수로 넣어 동일한 결과를 나타냅니다.
rb.AddRelativeForce(Vector3.up * 10f);
// ≒
rb.AddForce(transform.up * 10f);
정리하자면
• AddForce( Vector3.up ) → 월드 기준 위로 힘을 가함
• AddForce( transform.up ) → 로컬 기준 위로 힘을 가함
• AddRelativeForce( Vector3.up ) → 로컬 기준 위로 힘을 가함
물체의 이동은 오브젝트 공간 (로컬 좌표계) 기준이다
transform.Translate(Vector3.forward * speed * Time.deltaTime);
물체의 transform 과 관련된 처리는 로컬 좌표계 기준입니다. 즉, 오브젝트가 어디를 바라보든 "자기 기준 앞으로" 움직입니다.
마무리
• Translate → 로컬 좌표 기준 이동
• AddForce → 월드 좌표 기준 물리 작용
그래서 Unity 를 다룰 때, 이와 같은 개념을 이해하면 언제 어떤 것을 사용할 지 조금 더 명확해 집니다.
'Unity' 카테고리의 다른 글
Input Sytem : InputAction 사용법 정리 (0) | 2025.07.14 |
---|---|
Player Input 컴포넌트를 꼭 써야할까? (0) | 2025.07.13 |
Unity 패키지(.unitypackage) 파일 다루는 방법과 주의할 점 (0) | 2025.07.12 |
Unity 에서 Serializable 사용 예 (0) | 2025.07.03 |
오브젝트를 태그로 찾고자 할 때 : FindWithTag() (0) | 2025.07.02 |