본문 바로가기

프로그래밍/Unity

스크립트에서 오브젝트/컴포넌트 접근 및 활성화

unity3d의 씬내에 표시되는 객체들은 모두 GameObject로 구성되고,

세부 항목들이 Component로 포함되어 계층을 이루고 있다.

   

빈 GameObject를 만들고, 여러 항목을 추가해 사용할 수 있어

필요한 오브젝트들을 관리하기 편리하다.

   

하지만 스크립트상에서 각 오브젝트에 접근하기가 애매할 수 있는데,

이와 관련해 아는 내용만 포스팅한다.

   

1. Hierarchy 에서 게임오브젝트 찾기

전역메쏘드인 GameObject.Find() / GameObject.FindWithTag() 로 찾는다.

GameObject obj = GameObject.Find( typeof(MyObject) );

GameObject obj = GameObject.FindWithTag("MyObjectTag");

   

2. 부모 자식 오브젝트 접근

GameObject 는 자식이나 부모 객체 정보를 가지고 있는데, 실제론 GameObject가 가지고

있다기 보다 GameObject의 컴포넌트인 Transform 객체가 가지고 있다.

Transform은 월드좌표, 로칼좌표등을 관리하는 녀석이라

이녀석을 통해 부모나 자식 객체를 얻어올 수 있다.

   

GameObject child = transform.Find("ChildObject").gameObject;

GameObject parent = transform.parent.gameObject;

GameObject child2 = transform.Find("Child/ChildObject").gameObject;

   

3. 스크립트에 접근

게임 오브젝트까지 접근을 했으면, 포함된 컴포넌트는 GetComponent로 구한다.

MyBehaviour myScript = (MyBehaviour) child.GetComponent( typeof( MyBehaviour ) );

myScript.Something();

   

4. 자식 오브젝트 리스트

자식 오브젝트를 배열로 가져와 순차적으로 어떤 작업을 할 때 사용한다.

Transform[] objList = gameObject.GetComponentsInChildren(typeof(Transform));

foreach( Transform child in objList )

{

child.gameObject.GetComponent( ....);

   

}

   

   

5. 오브젝트 활성화/비활성화

초기에는 비활성화 되어있다가, 어느 순간에 각 오브젝트들을 활성화 할 필요가 있다.

이경우 각 오브젝트를 찾아 active = true; 를 해주어야 하는데,

   

gameObject.SetActiverecursively( true );

   


'프로그래밍 > Unity' 카테고리의 다른 글

[Unity] 인스펙터에 UI 추가하기  (0) 2011.06.15
2D를 위한 Plane 생성  (0) 2011.05.30
Physics.Raycast  (0) 2011.05.13
2D 게임을 위한 몇가지  (0) 2011.05.09
터치 입력  (0) 2011.04.04
강체-RigidBody 기본속성  (0) 2011.02.03
[Unity3D] 오브젝트 회전 - Quaternion  (0) 2011.02.01
FBX 에니메이션 임포트  (0) 2011.01.27
캐릭터 컨트롤 하기  (4) 2011.01.20
기본 클래스 정리  (0) 2011.01.17