유니티 프로젝트를 진행하다보면 오브젝트를 움직이기 위해 스크립트 상에서 코드를 작성해본 경험이
한 번씩 있을 것이다. 근데 Transform에 포지션과 관련된 기능을 본다 가정하면 Transform.position과
Transform.localposition이 존재하는 것을 확인할 수 있다. 로컬과 월드의 개념을 모르고 사용했다면
그냥 내가 원하는 위치에 갈 때 까지 좌표를 계속 바꿔가면서 사용해야 할 것이다.
그렇기 때문에 오늘은 로컬 좌표와 월드 좌표에 대한 개념을 알아보고자 한다.
로컬 좌표
오브젝트를 기준으로 하는 좌표다.
그럼 오브젝트를 기준으로 하는 좌표가 무엇인지 살펴보면
우선 처음에 Square라는 스프라이트를 하나 생성 해주고 그 위치를 (2, 0, 0)으로 설정 해줬다.
그 다음 자식 Square 스프라이트를 다시 만들어 전에 만든 스프라이트에 자식 값으로 넣어줬다.
그 후 자식의 Square 스프라이트의 좌표도 (2, 0, 0)으로 만들어줬다.
여기서 둘의 오브젝트 포지션 값 (2, 0, 0)으로 동일 하다. 하지만 실제로 씬에서 나오는 위치는 서로 다르게 나타나는데
이 이유는 로컬 좌표는 오브젝트를 기준으로 위치를 설정하기 때문이다.
실제로는 부모 오브젝트의 좌표 (2, 0, 0)을 기준으로 자식 오브젝트의 좌표가 (2, 0, 0)만큼 더 간것이다.
그래서 자식의 좌표는 부모 좌표 + 자식 좌표 = (4, 0, 0)의 값을 이동했다고 보면된다.
결론
자식 오브젝트는 부모 오브젝트를 기준으로 한 로컬좌표를 사용하고 있다.
월드 좌표
유니티 상의 월드에서 어느 한 점을 원점(0, 0, 0)으로 두고 그 원점을 기준으로
오브젝트들의 위치를 알아낼 수 있는 좌표다.
위 사진을 다시 보면 부모의 오브젝트는 최상위 객체이기 때문에 게임 화면의 원점인 (0, 0, 0) 글로벌 좌표 기준으로
(2, 0, 0)만큼 이동한 것이다.
반대로 자식은 부모 오브젝트의 좌표를 기준으로 (2, 0, 0)이동 했다.
그러니 부모 오브젝트의 글로벌 좌표 기준 값은 (2, 0, 0)이고 자식 오브젝트의 글로벌 좌표 기준 값은 (4, 0, 0)이
되는 것이다.
요약
월드 스페이스 (글로벌 좌표)는 유니티의 화면의 (0, 0, 0) 기준으로 오브젝트의
위치를 판정하고 로컬 스페이스 (로컬 좌표)는 오브젝트를 기준으로 위치 를
판정한다. 그래서 최상위 부모 객체와 자식 객체를 움직일 때 기준점이 다르기
때문에 이를 잘 인지하고 좌표를 계산해야 한다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 주의해야 할 기능 Find (0) | 2023.11.29 |
---|---|
[Unity] Scriptable Object 의 개념 (0) | 2023.11.28 |
[Unity] 유니티의 렌더링 파이프라인 (0) | 2023.11.21 |
[Unity] 유니티의 생명주기 (Unity Life Cycle) (0) | 2023.11.16 |
[Unity3D] Gizmo로 Ray 확인하기 (1) | 2023.10.19 |