상세 컨텐츠

본문 제목

10장 공간과 움직임

유니티/게임만들기

by MJ_119 2024. 3. 12. 23:14

본문

- 전역 공간(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

관련글 더보기