[참조] 아래쪽에 있는 실습 파일 (AccessComponet.zip)을 받아서 보면 쉽게 테스트 가능함
[ 스크립트 상에서 게임 오브젝트 접근하는 방법 ]
Hierarchy 창에서 (전역 리소스에서) "Game Object" 찾기 - 예제 파일의 Camera 스크립트 참조
GameObject.Find() :GameObject의 이름으로 찾는다.
GameObject obj = GameObject.Find("ObjectName");
Hierarchy에 있는 모든 GameObject 중에서 찾기 때문에 객체가 많은 경우 문제의 소지가 있음
동일한 이름의 GameObject가 있을 경우 먼저 발견된(?) 객체 하나만을 리턴해준다.
GameObject.FindWithTag() : GameObject의 "Tag"로 찾는다.
GameObject obj = GameObject.FindWithTag("TagName");
Hierarchy에 있는 모든 GameObject 중에서 찾기 때문에 객체가 많은 경우 문제의 소지가 있음
동일한 태그의 GameObject가 있을 경우 먼저 발견된 객체 하나만을 리턴해준다.
문자열을 비교해서 찾는 것처럼 보이나, Tag를 숫자로 기억하고 찾는 것이라 Find보다 빠름
Gameobject.FindGameObjectsWithTag() : "Tag"로 된 모든 객체들을 찾는다.
Gameobject [] objs = GameObject.FindGameObjectsWithTag("TagName");
foreach(GameObject temp in objs)
temp.Translate(0, 0.1f, 0);
transform.Find() : 자식 객체에서만 찾음 / 리턴 자료형 Transform
GameObject.Find()는 비활성화된 Object는 못 찾지만, transform.Find()는 비활성화된 Object도 찾음
부모 객체에서 자식 "Game Object" 찾기 - 예제 파일의 Body 스크립트 참조
모든 "GameObject"는 Transform 객체를 가지고 있으며 이를 통해 자식 객체의 Transform에 접근하여 객체를 얻어 올 수 있게 됨
transform.Find / FindChild() : GameObject의 이름으로 자식의 transform을 찾아줌
GameObject obj = transform.Find("ObjectName").gameObject;
혹은 = transform.FindChild("ObjectName").gameObject;
두 단계 아래의 자식을 찾고자 하는 경우
GameObject obj = transform.Find("ChildName/GrandsonName");
GetChild() : index값이 들어 오며 열거된 순서에 맞춰 자식의 transform을 찾아줌(알파벳 순이라 생각하면 되며, Hierarchy 창에서 확인할 수 있음 / 0부터 시작함)
GameObject obj = transform.GetChild(0).gameObject;
자식 객체에서 부모 "Game Object" 찾기
GameObject obj = transform.parent.gameObject;
[ 스크립트 상에 콤포넌트에 접근하는 방법 ] - 예제 파일의 Character 스크립트 참조
Component가 존재하는 GameObject에 접근한 이후 GetComponet()를 활용하여 접근함
Script 콤포넌트 접근 ( private 형태의 콤포넌트)
ScriptName myScript = GetComponent< ScriptName>();
myScript.Something();
Collider 콤포넌트 접근
Collider MyCollider = GetComponet<Collider>();