• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Local 좌표계와 World 좌표계에 대한 질문입니다.

21.07.18 23:39 작성 조회수 887

1

안녕하세요! 앞선 질문들에서 어느정도의 해답을 얻었지만 제가 맞게 이해했는지 궁금하여 질문 드립니다.

TransformDirection, 즉 Translate를 이용하지 않으면 해당 좌표계(Vector3.forward, back 등..)는 local 좌표계지만 월드 좌표계로 인식되어 키 입력 시 월드 좌표계로 동작합니다.

이후, TransformDirection 혹은 Translate를 이용하면 local 좌표계를 world 좌표계로 변환시켜, 즉 world 좌표계가 인식할 수 있게 통역을 해주어 local기준(gameObject기준)으로 키 입력이 된다고 이해했습니다.

제가 이해한 것이 맞는지, 혹은 어느 부분이 틀렸는지 궁금합니다~! 

+ 추가 질문입니다.

transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);

에서 TransformDirection을 이용하면 local 좌표계가 world 좌표계로 변환된다고 하였는데,

transform.position += transform.forward * Time.deltaTime * _speed;

와 같이 transform.forward를 사용하면 변환하지 않고 바로 사용 가능합니다. 그 이유가 궁금합니다.

답변 1

답변을 작성해보세요.

3

사과개수가 3개인데 +1을 하면 사과가 4개가 될 것이고
바나나 개수가 2개인데 +1을 하면 바나나 개수가 3개가 될 것입니다.
하지만 그렇다고 +1이 사과라거나, +1이 바나나라고 한다면 조금 이상한 말이겠죠.

마찬가지로 Vector3.forward도 타고 가서 보면은
Vector3(0, 0, 1)과 같이 지정된 벡터 값을 지닌 것에 불과합니다.
이것 벡터값을 Local 좌표로 분석할지 World 좌표로 분석할지는 문맥에 따라 다른 것이라서
뭔가가 '변환'되는 개념이 아닙니다.

함수들 중에서 Vector3를 받아서 연산하는데
그 함수 자체가 World 좌표 계산 함수였다면 문맥상 World 좌표로 인식하는 것이고,
(ex. transform.position은 World 좌표)
localPosition처럼 로컬 좌표에다 transform.forward을 더해주면
로컬 좌표로 인식해서 더해지는 것입니다.

사실 이 부분은, DX나 openGL로 자체 엔진을 만드는 연습을 해보면 명확히 알 수 있고
유니티나 언리얼을 바로 시작하면 좀 난해한 개념 같습니다.