유니티 변환(Transform)
유니티에서 Transform 컴포넌트는 객체의 위치(Position), 회전(Rotation), 크기(Scale)를 관리하는 가장 기본적이고 중요한 컴포넌트입니다. 유니티의 모든 게임 오브젝트는 Transform 컴포넌트를 가지고 있으며, 이를 통해 게임 오브젝트의 공간적 속성을 제어할 수 있습니다.
위치(Position)
위치는 게임 오브젝트가 월드 또는 로컬 좌표계에서 어느 위치에 있는지를 나타냅니다. 위치는 Vector3로 표현되며, 각 축(x, y, z)에 대한 값을 가집니다.
// 예제: 위치 설정 transform.position = new Vector3(10, 0, 5); // 예제: 위치 이동 transform.position += new Vector3(1, 0, 0);
회전(Rotation)
회전은 게임 오브젝트가 월드 또는 로컬 좌표계에서 어떤 방향으로 회전되어 있는지를 나타냅니다. 회전은 Quaternion을 사용하여 표현됩니다.
// 예제: 회전 설정 transform.rotation = Quaternion.Euler(0, 90, 0); // 예제: 회전 추가 transform.Rotate(new Vector3(0, 10, 0));
크기(Scale)
크기는 게임 오브젝트의 크기를 나타내며, Vector3로 표현됩니다. 각 축에 대한 크기를 독립적으로 설정할 수 있습니다.
// 예제: 크기 설정 transform.localScale = new Vector3(2, 2, 2); // 예제: 크기 변경 transform.localScale *= 1.1f;
부모-자식 관계(Parent-Child Relationship)
Transform 컴포넌트는 부모-자식 관계를 통해 계층 구조를 형성할 수 있습니다. 부모의 변환이 자식에게 영향을 미치게 됩니다.
// 예제: 부모 설정 transform.parent = parentTransform; // 예제: 자식 추가 childTransform.parent = transform; // 예제: 부모에서 분리 childTransform.parent = null;
관련 함수들(Related Functions)
유니티 Transform 컴포넌트는 다양한 함수들을 제공하여 게임 오브젝트의 변환을 쉽게 조작할 수 있게 합니다.
Transform.Translate(Vector3 translation)
: 객체를 주어진 벡터만큼 이동시킵니다.
// 예제: 객체 이동 transform.Translate(new Vector3(1, 0, 0));
Transform.Rotate(Vector3 eulerAngles)
: 객체를 주어진 각도로 회전시킵니다.
// 예제: 객체 회전 transform.Rotate(new Vector3(0, 30, 0));
Transform.LookAt(Transform target)
: 객체가 특정 목표를 바라보게 합니다.
// 예제: 특정 목표 바라보기 transform.LookAt(targetTransform);
Transform.Find(string name)
: 이름으로 자식 객체를 찾습니다.
// 예제: 자식 객체 찾기 Transform child = transform.Find("ChildName");
Transform.GetChild(int index)
: 인덱스로 자식 객체를 반환합니다.
// 예제: 자식 객체 가져오기 Transform child = transform.GetChild(0);
Transform.DetachChildren()
: 모든 자식 객체를 분리합니다.
// 예제: 자식 객체 모두 분리 transform.DetachChildren();
Transform.TransformDirection(Vector3 direction)
: 로컬 방향을 월드 방향으로 변환합니다.
// 예제: 로컬 방향을 월드 방향으로 변환 Vector3 worldDir = transform.TransformDirection(Vector3.forward);
Transform.InverseTransformDirection(Vector3 direction)
: 월드 방향을 로컬 방향으로 변환합니다.
// 예제: 월드 방향을 로컬 방향으로 변환 Vector3 localDir = transform.InverseTransformDirection(worldDir);
다양한 예제(Diverse Examples)
- 객체를 앞으로 이동시키기
void Update() { transform.Translate(Vector3.forward * Time.deltaTime); }
- 객체를 지정된 목표로 회전시키기
void Update() { if (targetTransform != null) { transform.LookAt(targetTransform); } }
- 마우스 클릭 위치로 객체 이동시키기
void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { transform.position = hit.point; } } }
- 일정 시간마다 객체 크기 변경하기
IEnumerator Start() { while (true) { transform.localScale *= 1.1f; yield return new WaitForSeconds(1); } }
유니티의 Transform 컴포넌트는 게임 오브젝트의 위치, 회전, 크기와 관련된 모든 것을 다루며, 이를 통해 복잡한 움직임과 상호작용을 구현할 수 있습니다. 다양한 함수와 예제를 통해 유니티에서 게임 오브젝트를 효율적으로 제어할 수 있습니다.