KoreanFoodie's Study

#10. 공간과 움직임 본문

Game Dev/Unity : Tutorial

#10. 공간과 움직임

GoldGiver 2022. 7. 10. 14:03

지역 공간과 전역 공간

위의 큐브는 y 축을 기준으로 회전을 가해졌다. 현재 트랜스폼의 좌표계는 지역공간으로 나와 있는데, 이를 전역 공간 (게임 월드를 기준) 으로 바꿔서 옮겨볼 수도 있다. 

지역 공간은 부모 오브젝트를 기준으로 하며, 오브젝트 공간은 자기 자신을 기준으로 한다.

지역 공간이 부모 오브젝트를 기준으로 하기 때문에, 큐브 A 의 자식 큐브 B 를 설정한 후 큐브 A 를 회전하면, 큐브 B 의 공간도 회전된 상태로 트랜스폼이 이동과 회전이 이루어질 것이다.

인스펙터 창에 표시되는 위치, 회전, 스케일은 지역 공간 기준으로 측정된 값이다.

 

평행이동과 회전 예제

// 기본적으로 지역 공간을 기준으로 평행이동
transform.Translate(new Vector3(0, 1, 0) * Time.deltaTime);

// 자신의 Y 축 방향과 상관없이 전역 공간을 기준으로 Y 축 방향으로 평행이동
transform.Translate(new Vector3(0, 1, 0) * Time.deltaTime, Space.World);

// 게임월드의 Y 축 방향과 상관없이 자신의 Y축 방향으로 평행이동 (기본값)
transform.Translate(new Vector3(0, 1, 0) * Time.deltaTime, Space.Self);

// x 축 기준으로 1초마다 60도씩 회전
transform.Rotate(new Vector3(60, 0, 0) * Time.deltaTime);

// 전역공간을 기준으로 회전
transform.Rotate(new Vector3(60, 0, 0) * Time.deltaTime, Space.World);

// 지역공간을 기준으로 회전
transform.Rotate(new Vector3(60, 0, 0) * Time.deltaTime, Space.Self);

// Rotate 시 쿼터니언을 활용하기 (짐벌락 현상 해소)
float rotationSpeed = 30f;
transform.rotation = Quaternion.Euler(new Vector(rotationSpeed * Time.deltaTime, 0, 0));
Comments