본문 바로가기
Lecture

Unity3D의 GameObject 객체 소개

by 작은별하나 2014. 3. 18.
반응형

Unity3D에서 GameObject는 기본객체입니다.  이 객체에 어떤 스크립트들이 붙는 가에 따라서 해당 게임오브젝트는 다른 작업을 하게 됩니다.  객체에 연결할 수 있는 스크립트는 여러개가 존재할 수 있고, 각각의 스크립트는 독립적으로 수행됩니다.


게임 오브젝트에서 가장 중요한 변수는 transform이라는 변수입니다.  transform 변수가 중요한 이유는, 게임 오브젝트의 이동, 회전, 크기변화 등을 할 수 있을 뿐 아니라, 게임 오브젝트 상호간의 계층구조를 이루기 때문입니다.


name이란 멤버 변수는 앞서 MonoBehaviour 클래스에서 설명한 name과 동일합니다.


GameObject 객체에서는 멤버 변수는 transform, name 이외에 현재 중요하다고 생각할 수 있는 부분은 별로 없습니다.  실제 유용하게 사용하기 위해서는 멤버 함수들과 정적 함수(static function)들에 대해서 잘 알아두셔야 합니다.


AddComponent(string className)

이 함수는 게임오브젝트에 컴포넌트(결국 스크립트 클래스)를 연결하게 됩니다.  에디터에서 스크립트 파일을 드래그앤드롭해서 컴포넌트를 추가할 수도 있지만, 프로그램에서도 추가할 수 있습니다.  앞으로 자주 사용할 함수입니다.


T GetComponent<T>()

GetComponet 함수는 이것 말고도 몇가지 있는데, 가장 보편적으로 사용하는 함수가 이 함수입니다.  예를 들어서 현재 게임오브젝트에서 MyController 라는 컴포넌트를 얻고 싶다면 다음과 같이 해주시면 됩니다.


MyController controller = gameObject<MyController>();


T[] GetComponentsInChildren<T>()

게임오브제트의 계층 아래에 있는 컴포넌트들 중에 T 타입인 컴포넌트들을 모아서 배열로 반환을 해줍니다.


void SendMessage(string methodName, object value=null, SendMessageOptions options = SendMessageOptions.RequireReceiver)

이 함수는 서로 다른 오브젝트들끼리 메시지를 주고받을 수 있습니다.  보다 명확하게는 함수를 호출하게 됩니다.  methodName에는 함수 이름이 들어가고, value는 값을 넣게 됩니다.  주로 콜백(callback)에 사용합니다.


static Object[] FindObjectsOfType(Type type)

이 함수는 정적함수로 모든 오브젝트들을 검사해서 type에 해당하는 오브젝트들을 모아 배열로 만들어줍니다.  성능에 영향이 많기 때문에, Update() 함수에서 사용하는 것은 자제하도록 합니다.  주로 Start() 함수에서 사용합니다.


이제 게임오브젝트에서 가장 중요한 transform 멤버 변수에 대한 설명입니다.  transform 멤버 변수는 Transform이란 타입입니다.  실제 그래픽 프로그래밍에서 가장 중요한 것은 객체 상호간의 연결인데, 이 역할을 바로 transform이란 변수가 담당하고 있습니다.


transform을 이해하기 위해서는 월드 좌표계(World coordinate system)와 로컬 좌표계(Local coordinate system)에 대한 이해가 있어야 합니다.


우리말로 잘 설명이 되어 있는 사이트가 거의 없네요.  나중에 한번 정리하도록 할께요.

http://codecrue.egloos.com/12673


그다음에는 씬그래프(Scene graph)에 대해서 이해하고 있어야 합니다.  씬 그래프는 그래픽 표시를 위한 노드들이 계층적으로 묶여있는 것을 의미합니다.  보통은 트리 형태로 표현됩니다.  또는 방향성 있는 그래프로 표시되기도 하는데, 구현 난이도가 높기 때문에 트리 형태가 일반적입니다.  Unity3D 역시 트리형태의 씬 그래프를 운용하고 있습니다.


씬그래프에 대한 자료는요.

http://blog.naver.com/jmsoul1/130025489005

이 사이트가 설명이 잘 되어 있네요.


Transform 클래스의 가장 중요한 멤버함수는 다음과 같습니다.


Translate(Vector3 offset), Rotate(Vector3 eulerAngles) 

이 두개의 함수는 모두 현재 트랜스폼 기준으로 상대로 움직입니다.  절대 위치를 지정하기 위해서는 멤버 변수에 직접 값을 적용토록 합니다.  


localPosition, localEulerAngles, localScale

이 메서드들은 로컬 위치, 로컬 회전값, 로컬 크기값을 가지고 있습니다.   직접 값을 설정할 수 있습니다.  사실 위의 Translate, Rotate 보다 전 이 값을 더 자주 사용합니다.


childCount, parent, Transform GetChild(int index)

childCount는 현재 Transform에 연결되어 있는 자식 트랜스폼들의 갯수입니다.  Transform은 각자가 게임오브젝트를 레퍼런스하고 있기 때문에, 트랜스폼에 있는 연결 구조를 가지고 게임오브젝트를 얻어오는 것은 문제가 없습니다.  parent는 부모 트랜스폼입니다.  GetChild(int index) 함수를 통해서 index번째 자식트랜스폼을 얻어올 수 있습니다.




728x90

'Lecture' 카테고리의 다른 글

Snake Bite 텍스트 게임 제작하기 - 1  (0) 2019.12.10
3. Unity3D에서 간단한 C# 스크립트 만들기  (0) 2014.04.22
Unity3D의 Monobehaviour 클래스 소개  (2) 2014.03.18
Unity3D와 NGUI 소개 및 설치  (0) 2014.03.17
목차  (0) 2014.03.17

댓글