
유니티로 작업을 하다보니 오브젝트끼리 응집도를 낮추면서도 필요한 오브젝트끼리 서로 이어주는 작업이 굉장히 까다롭고 어려웠다.
모든 오브젝트와 스크립트를 한 번에 묶기보다는 흩어져서 설정해두고 필요할 때 GameObject.Find를 이용하니 굉장히 설정이 편해졌다.
검색을 해서 알아낸 사용법은 다음과 같다.
GameObject obj1 = GameObject.Find("Name");
// Object의 이름으로 대상을 찾아서 반환, 이름이 같을 경우 가장 처음 검색된 Object 반환
GameObject obj2 = GameObject.FindWithTag("Tag");
// 태그로 대상을 찾아서 반환, 이름이 같을 경우 가장 처음 검색된 Object 반환
GameObject obj3 = GameObject.FindObjectsWithTag("Tag");
// 같은 태그를 가진 Object들을 GameObject[] 형태로 반환
FindObjectsWithTag를 오늘 유용하게 사용했는데,
Scene에 3개의 나열 된 체력 오브젝트를 모두 불러와서 배열에 담고,
정렬 알고리즘으로 왼쪽부터 순서대로 배열에 넣어둔 다음,
체력이 줄어들 때 해당 배열값을 불러와서 꺼뜨렸다.
그래서 만약 꺼진 오브젝트를 찾고자 한다면, Active상태인 부모 오브젝트를 먼저 찾고, 그 아래에 자식 오브젝트를 건드려 줘야한다.
public void FindEndPanel()
{
endPanel = GameObject.Find("Canvas").transform.Find("EndPanel").gameObject;
}
위 코드는 꺼져있는 EndPanel을 찾아주기 위해 Canvas부터 찾아들어간 코드이다.
해당 방법을 자주 사용하면 메모리 낭비가 될 것이기 때문에, 써야할 오브젝트를 시작 시점에 몰아두고 사용하는게 좋다고 한다.
너무 잦은 사용은 지양하자.