스크립트를 게임오브젝트(GameObject)단위로 관리하다보면 생기는 문제가 다른 게임오브젝트에 있는 스크립트를 호출해야 하는 경우입니다.
유니티에서 오브젝트를 찾는건 쉽습니다.
(유니티 : 유티니 스크립트 레퍼런스 - GameObject )
FindWithTag
FindGameObjectsWithTag
Find
이것이 다 오브젝트를 찾기위한 메소드 들입니다.
'FindGameObjectsWithTag'는 아래와 같이 사용합니다.
(유니티 : 유티니 스크립트 레퍼런스 - GameObject.FindGameObjectsWithTag)
//태그를 검색한다.
GameObject[] goTempList = GameObject.FindGameObjectsWithTag("Box");
//검색된 태그를 확인한다.
foreach (GameObject goTemp in goTempList)
{
}
' Box'는 오브젝트에 적용된 태그입니다.
구성요소를 찾기위한 메소드는 다음과 같습니다.
(유니티 : 유티니 스크립트 레퍼런스 - GameObject )
GetComponent
GetComponentInChildren
GetComponents
GetComponentsInChildren
'GetComponent<T>'를 사용하면 원하는 구성요소('Add Component'를 통해 추가된 요소들)를 받아 올 수 있습니다.
'GetComponent'를 통해 적용된 스크립트를 찾기위해서는 아래와 같이 사용합니다.
(참고 : 유티니 스크립트 레퍼런스 - GameObject.GetComponent)
//스크립을 검색합니다.
insScript = goTemp.GetComponent<claCube>();
'claCube'는 스크립트의 이름입니다.
파일이름이 아니고 스크립트의 클래스이름입니다.
(그러고보니 유니티는 파일이름과 클래스 이름이 다르면 게임오브젝트에 적용 할 수 없는거 같더군요.)
클래스까지 찾았으니 그냥 호출하면 됩니다.
ㅎㅎㅎ
claCube insScript;
//스크립을 검색합니다.
insScript = goTemp.GetComponent<claCube>();
//메소드를 호출 합니다.
insScript.RandomRotate();
테스트를 해봅시다.
유니티의 래퍼런스를 보고 있으면....한숨이 ㅡ,.ㅡ;;;
어찌됐건 'GetComponent<클래스이름>'으로 스크립트를 받아오면 됩니다.