- 전역 공간(global), 오브젝트 공간, 지역 공간의 차이점
- 원점을 기준으로 (x , y , z) : x는 오른쪽, Y는 위쪽, Z는 앞쪽으로 이동한 위치.
- 전역 공간(global) : 월드의 중심 이라는 절대 기준이 존재하는 공간, (= 월드공간)
원점 (0,0,0)이 존재
- 지역 공간 : 자신의 부모 게임 오브젝트를 기준으로 위치를 측정.
- 오브젝트 공간 : 자기 자신을 기준으로 위치를 측정.
- 지역공간에서 위치, 회전, 스케일값 측정 : 지역 공간 ( 부모오브젝트 기준 )
- 지역공간에서 평행이동 : 오브젝트 공간 ( 자기 자신의 방향을 기준으로 평행이동 )
- 좌표계의 종류
- 부모-자식 관계
게임 오브젝트는 부모를 세상의 중심으로 여기고 좌표를 측정.
- 회전과 평행이동
public Transform childTransform; // 움직일 자식 게임 오브젝트의 트랜스폼 선언
if ( Input.GetKey(KeyCode.UpArrow ))
{
// 위쪽 방향키를 누르면 초당 (0,1,0)의 속도로 평행이동
transform.Translate(new Vector3(0,1,0) * Time.deltaTime);
}
if ( Input.GetKey(KeyCode.DownArrow ))
{
// 아래쪽 방향키를 누르면 초당 (0,-1,0)의 속도로 평행이동
transform.Translate(new Vector3(0,-1,0) * Time.deltaTime);
}
if ( Input.GetKey(KeyCode.LeftArrow ))
{
// 왼쪽 방향키를 누르면
// 자신의 오브젝트(자식 X) 초당 (0,0,180) 반시계 방향 회전
transform.Rotate(new Vector3(0,0,180) * Time.deltaTime);
// 자식의 오브젝트(부모 X) 초당 (0,180,0) 반시계 방향 회전
childTransform.Rotate(new Vector3(0,180,0) * Time.deltaTime);
}
if ( Input.GetKey(KeyCode.RightArrow ))
{
// 오른쪽 방향키를 누르면
// 자신의 오브젝트(자식 X) 초당 (0,0,-180) 시계 방향 회전
transform.Rotate(new Vector3(0,0,-180) * Time.deltaTime);
// 자식의 오브젝트(부모 X) 초당 (0,-180,0) 시계 방향 회전
childTransform.Rotate(new Vector3(0,-180,0) * Time.deltaTime);
}
- 위치와 회전
- 전역 위치 : postion
- 지역 위치 : localPostion
- 전역 회전 : rotation
- 지역 회전 : localRotation
transform.Translate(new Vector3(0,1,0) * Time.deltaTime, Space.World); // 전역 공간 기준으로 평행 이동
transform.Translate(new Vector3(0,1,0) * Time.deltaTime, Space.Self); // 지역 공간 기준으로 평행 이동
transform.Rotate(new Vector3(0,0,180) * Time.deltaTime, Space.World); // 전역 공간 기준으로 회전
transform.Rotate(new Vector3(0,0,180) * Time.deltaTime, Space.Self); // 지역 공간 기준으로 회전
- 유니티에서 같은 동작 하는 벡터
< 모두 크기가 1인 방향벡터 >
Vector3.forward = new Vector3(0,0,1)
Vector3.back = new Vector3(0,0,-1)
Vector3.right = new Vector3(1,0,0)
Vector3.left = new Vector3(-1,0,0)
Vector3.up = new Vector3(0,1,0)
Vector3.down = new Vector3(0,-1,0)
transform.forward : 자신의 앞쪽을 가리키는 방향벡터
transform.right : 자신의 오른쪽을 가리키는 방향벡터
transform.up : 자신의 위쪽을 가리키는 방향벡터
** 앞쪽 말고 뒤쪽, 왼쪽, 아래쪽은 위의 값에 각각 -1을 곱해서 사용.
ex. transform.forward * -1
- 자신의 앞쪽으로 평행이동
transform.Translate(new Vector3(0, 1, 0));
// 위의 동작을 아래와 같이 표현 가능.
transform.position = transform.position + transform.up * 1;
- 전역 공간 앞쪽으로 평행이동
transform.Translate(new Vector3(0, 1, 0), Space.World);
// 위의 동작을 아래와 같이 표현 가능.
transform.position = transform.position + Vector3.up * 1;
- Translate(), Rotate() : 기본적으로 지역 공간 기준으로 동작
12장 유니런(배경스크롤링) (0) | 2024.03.21 |
---|---|
11장 유니런(1) (0) | 2024.03.15 |
쿼터니언(회전) (0) | 2024.03.12 |
벡터 (0) | 2024.03.11 |
UI 앵커 프리셋, 게임 매니저 (1) | 2024.03.05 |