사전캠프/Unity

Unity 스크립트 - transform, Vector3

서보훈 2024. 8. 19. 17:27

빗물받는 르탄이 강의 중, 4번 캐릭터 움직이기에서 transform과 Vector3를 사용하는것이 나옵니다.

 

해당 스크립트에 관한 정보를 정리해보도록 하겠습니다.


transform 의 Unity 메뉴얼

https://docs.unity3d.com/kr/2021.3/Manual/class-Transform.html

 

트랜스폼 - Unity 매뉴얼

트랜스폼(Transform) 은 게임 오브젝트의 포지션, 회전, 스케일, 부모-자식 상태를 저장하기 위해 사용하며 따라서 매우 중요합니다. 게임 오브젝트에는 항상 하나의 트랜스폼 컴포넌트가 있습니다

docs.unity3d.com

 

transform 은 unity에서 사용되는 오브젝트의 위치 좌표, 오브젝트의 각도, 크기를 저장하고 있는 컴포넌트입니다.

이 컴포넌트는 모든 오브젝트에서 필수적으로 존재하며, 빈 오브젝트를 생성해도 기본적으로 이 컴포넌트가 있는것을 확인 할 수 있습니다.

빈 오브젝트를 생성해도, Transform 컴포넌트가 붙어서 생성됩니다.

 

해당 컴포넌트를 스크립트에서 조작할 수 있습니다.

https://docs.unity3d.com/ScriptReference/Transform.html

 

Unity - Scripting API: Transform

Every object in a Scene has a Transform. It's used to store and manipulate the position, rotation and scale of the object. Every Transform can have a parent, which allows you to apply position, rotation and scale hierarchically. This is the hierarchy seen

docs.unity3d.com

 

this.transform

형태로 Transform 컴포넌트를 조작할 수 있으며, this. 부분은 생략이 가능합니다.

해당 형태로 사용할경우, 이 스크립트가 붙은 오브젝트의 transform을 사용하게되며 this. 부분을 GameObject 변수를 지정하여 사용할 경우, 지정한 오브젝트의 transform을 변경하게 됩니다.

 

transform 컴포넌트의 구성요소로 좌표, 회전값, 크기 3개가 있습니다.

각각 다음의 방식으로 조작할 수 있습니다.

//좌표 조작
transform.position
//회전 조작
transform.rotation
//크기 조작
transform.Scale

해당값들은 Vector3의 형식으로 저장되어있기 때문에 Vector3를 사용하여 연산을 해주어야 합니다.

 

//좌표 조작, 매 호출마다 position 값을 (1, 1, 1) 만큼 증가
transform.position += Vector3.one;
//회전 조작, 매 호출마다 rotation 값을 (1, 1, 1) 만큼 증가
transform.rotation *= (Quaternion.Euler(Vector3.one));
//크기 조작, 매 호출마다 scale 값을 (1, 1, 1) 만큼 증가
transform.localScale += Vector3.one;

rotation 의 경우, +- 연산이 불가능하며 축의 뒤틀림을 방지하기 위해 Quaternion 을 사용합니다.

해당부분은 이후에 따로 정리할 필요가 있으니 지금은 생략하도록 하겠습니다.

 

transform.position 에 + 연산을 해주면 컴포넌트의 Transform 값이 더해준 값 만큼 증가하게 됩니다.

 

transform 을 사용하여 오브젝트를 움직인다 라고 생각하시면 됩니다.

 

또한 transform에서 사용할 수 있는 함수들이 있습니다.

//호출될 때마다 (1, 0, 0) 만큼 position 증가
transform.Translate(Vector3.right);
//호출될 때마다 오브젝트의 z축이 (0, 0, 0) 를 보도록 만든다
transform.LookAt(new Vector3(0, 0, 0));
//호출될 때마다 (1, 0, 0) 만큼 rotation 증가
transform.Rotate(Vector3.right);

 

이 외에도 다양한 활용이 가능하지만, 오브젝트의 움직임을 표현할 때, 주로 이러한 함수를 사용합니다.


 

Vector3 의 Unity 매뉴얼

https://docs.unity3d.com/kr/530/ScriptReference/Vector3.html

 

UnityEngine.Vector3 - Unity 스크립팅 API

Representation of 3D vectors and points.

docs.unity3d.com

 

Vector3 는 3차원 좌표를 표현하기 위해 사용되는 구조체로, 위치와 방향을 전달하거나 벡터 연산을 실행할수도 있습니다.

 

Vector3 를 변수로 선언할경우, 이러한 규칙을 따라야합니다.

//Vector3 변수 선언
private Vector3 newVector = new Vector3(1,1,1);

 

자체적으로 선언되어있는 속성을 사용할경우 이러한 선언을 하지 않아도 됩니다

private Vector3 newVector = Vector3.one;

Vector3 에는 다음과 같은 값이 속성으로 존재합니다.

Vector3.one Vector3.zero Vector3.right Vector3.up Vector3.forward Vector3.left Vector3.down Vector3.back
(1, 1, 1) (0, 0, 0) (1, 0, 0) (0, 1, 0) (0, 0, 1) (-1, 0, 0) (0, -1, 0) (0, 0, -1)

 

또한 Vector3에 선언된 함수를 통해, 벡터연산을 할 수 있습니다.

//벡터의 크기
Vector3.Magnitude();
//벡터의 크기(루트 연산을 하지 않아 메모리를 덜 소모함)
Vector3.SqrMagnitude();
//단위벡터화
Vector3.Normalize();

float 값으로 각 x, y, z 벡터를 따로 받아줄 수도 있습니다

//벡터 선언
private Vector3 newVector = new Vector3(3, 2, 1);
//벡터의 x값 : 3저장
float x = newVector.x;
//벡터의 y값 : 2 저장
float y = newVector.y;
//벡터의 z값 : 1 저장
float z = newVector.z