-
10장. 공간과 움직임Unity/레트로의 유니티 게임 프로그래밍 에센스 2020. 11. 11. 12:04
<전역 공간, 오브젝트 공간, 지역 공간의 차이점>
<좌표계의 종류>
<부모-자식 관계>
<회전과 평행이동>
10.1 유니티 공간
- 게임 월드는 하나지만 하나의 좌표계(공간)로는 게임 월드의 모든 속성을 표현할 수 없음.
- 이후 설명할 전역 공간, 오브젝트 공간, 자식 공간은 하나의 게임 월드를 서로 다른 잣대로 관측하여 표현한 것.
10.1.1 전역 공간
- 월드의 중심이라는 절대 기준이 존재하는 공간. = 월드 공간(world space).
- 전역 공간에서 X,Y,Z 방향을 정하고 그에 따라 좌표를 계산하는 기준을 전역 좌표계(global coordinate system).
- 전역 공간에는 원점(0, 0, 0)이 존재하며 모든 오브젝트가 원점에서 얼마만큼 떨어져 있느냐가 오브젝트의 좌표가 됨
- Pivot : 오브젝트의 실제 기준점으로 오브젝트 배치
- Center : 눈에 보이는 오브젝트의 중심점을 기준으로 오브젝트 배치
10.1.2 오브젝트 공간
- 오브젝트의 방향을 기준으로 보는 좌표계. 오브젝트가 회전했다면 전역 공간과 방향이 달라짐.
- local 공간을 뜻하는 건 아님.
10.1.3 지역 공간
- 부모 오브젝트가 존재하지 않으면 지역 좌표계와 전역 좌표계가 일치.
- 지역 공간은 자신의 부모 오브젝트를 기준으로 하는 지역 좌표계로 좌표를 측정.
상대적인 좌표계- 인스펙터 창에 표시되는 (모든) 게임 오브젝트의 위치, 회전, 스케일은 모두 지역 공간에서 측정한 값.
- 부모와 자식 사이의 (전역 좌표계로 측정한) 거리도 스케일의 영향을 받게됨.
- 부모가 회전하면 자식은 부모를 중심으로 공전.
10.1.4 지역 공간과 오브젝트 공간의 차이
- 전역 공간 : 게임 월드의 원점을 기준으로 위치를 측정.
- 지역 공간 : 자신의 부모 게임 오브젝트를 기준으로 위치를 측정
- 오브젝트 공간 : 자기 자신을 기준으로 위치를 측정 -> 추가 이해 필요...
- 지역 공간에서 앞쪽은 부모의 앞쪽. Local 모드(오브젝트 공간)에서 앞쪽은 해당 오브젝트의 앞쪽.
- 지역 공간에서 위치, 회전, 스케일값 측정(인스펙터 창) : 부모 게임 오브젝트를 기준으로 측정(지역 공간)
- 지역 공간에서 평행 이동 : 게임 오브젝트 자신의 방향을 기준으로 평행 이동(오브젝트 공간)
10.2 오브젝트의 이동과 회전
10.2.1 스크립트 작성하기
10.2.2 위치화 회전 결정하기
10.2.3 Update() 메서드 구현
10.2.4 평행이동 (Transform.Translate())
- parenttransform.Translate(new Vector3(0, 1, 0) * Time.deltaTime, Space.World); Translate()는 지역 공간을 기준으로함. 전역 공간으로 하기위해 두번째 파라미터로 Space타입을 받아서 전역 공간 기준으로 함.
- Space.World 전역 공간, Space.Self 지역 공간
10.2.5 회전 (Transform.Rotate())
- parenttransform.Rotate(new Vector(0, 0, 180) * Time.deltaTime, SpaceWorld);
10.2.6 테스트
10.3 벡터 연산으로 평행이동 구현하기
10.3.1 벡터의 속기
- 미리 만들어진 편리한 변수. up, down, forward, back, left, right -> 크기가 1인 방향 벡터(전역 공간).
Vector3 position = Vector3.up;
Vector3 position = new Vector3(0, 1, 0);
10.3.2 트랜스폼의 방향
- transform.forward : 자신의 앞쪽을 가리키는 방향벡터(지역 공간)
- transform.right
- transform.up
- 다른 방향은 없음 -> -1을 곱해서 나타냄.
10.3.3 벡터 연산으로 평행이동
- 자신의 앞쪽으로 평행이동
transform.position = transform.position + transform.up*1;
transform.Translate(new Vector3(0, 1, 0));
- 전역 공간 앞쪽으로 평행이동
transform.position = transform.position + Vector3.up*1;
transform.Translate(new Vector(0, 1, 0), Space.World);
10.4 마치며
- 전역 공간은 게임 월드를 기준
- 지역 공간은 부모 게임 오브젝트를 기준(방향을 제외한 것들)
- 오브젝트 공간은 자기 자신을 기준(방향과 그에 따른 평행이동)
- 인스펙터 창에 표시되는 위치, 회전, 스케일은 지역 공간 기준으로 측정된 값
- transform.Translate(). 지역 공간(오브젝트 공간)을 기준으로 동작
- transform.Rotate(). 기본적으로 지역 공간을 기준으로 동작
- transform.forward 지역 공간(오브젝트 공간)의 방향벡터
- Vector3.forward 전역 공간의 방향벡터
'Unity > 레트로의 유니티 게임 프로그래밍 에센스' 카테고리의 다른 글
12장. 유니런 배경 스크롤링과 게임 매니저 (0) 2020.11.17 11장. 유니런 플레이어 제작 (0) 2020.11.15 09장. 방향, 크기, 회전 (0) 2020.11.10 08장. 닷지_게임 매니저와 UI, 최종 완성 (0) 2020.09.07 07장. 닷지_탄알제작 (0) 2020.09.02