2014. 4. 1. 15:00

스크립트를 게임오브젝트(GameObject)단위로 관리하다보면 생기는 문제가 다른 게임오브젝트에 있는 스크립트를 호출해야 하는 경우입니다.

 

 

1. 오브젝트 찾기

유니티에서 오브젝트를 찾는건 쉽습니다.

(유니티 : 유티니 스크립트 레퍼런스 - GameObject )

 

FindWithTag

FindGameObjectsWithTag

Find

 

이것이 다 오브젝트를 찾기위한 메소드 들입니다.

 

'FindGameObjectsWithTag'는 아래와 같이 사용합니다.

(유니티 : 유티니 스크립트 레퍼런스 - GameObject.FindGameObjectsWithTag)

//태그를 검색한다.
GameObject[] goTempList = GameObject.FindGameObjectsWithTag("Box");

//검색된 태그를 확인한다.
foreach (GameObject goTemp in goTempList)
{
}

 

' Box'는 오브젝트에 적용된 태그입니다.

 

 

2. 구성요소 찾기구성요소 찾기

구성요소를 찾기위한 메소드는 다음과 같습니다.

(유니티 : 유티니 스크립트 레퍼런스 - GameObject )

 

GetComponent

GetComponentInChildren

GetComponents

GetComponentsInChildren

 

'GetComponent<T>'를 사용하면 원하는 구성요소('Add Component'를 통해 추가된 요소들)를 받아 올 수 있습니다. 

'GetComponent'를 통해 적용된 스크립트를 찾기위해서는 아래와 같이 사용합니다.

(참고 : 유티니 스크립트 레퍼런스 - GameObject.GetComponent)

//스크립을 검색합니다.
insScript = goTemp.GetComponent<claCube>();

 

'claCube'는 스크립트의 이름입니다.

파일이름이 아니고 스크립트의 클래스이름입니다.

(그러고보니 유니티는 파일이름과 클래스 이름이 다르면 게임오브젝트에 적용 할 수 없는거 같더군요.)

 

 

3. 메소드 호출하기

클래스까지 찾았으니 그냥 호출하면 됩니다.

ㅎㅎㅎ

claCube insScript;

//스크립을 검색합니다.
insScript = goTemp.GetComponent<claCube>();
//메소드를 호출 합니다.
insScript.RandomRotate();

 

 

테스트를 해봅시다.

 

 

 

마무리

테스트에 사용한 프로젝트 다운 받기(클릭)

 

유니티의 래퍼런스를 보고 있으면....한숨이 ㅡ,.ㅡ;;;

어찌됐건 'GetComponent<클래스이름>'으로 스크립트를 받아오면 됩니다.