별생각 없이 프리팹(Prefab)에 들어가는 코드에 들어가는 코드에 다음과 같이 개체를 검색했습니다.
TextMeshProUGUI ItemText = GameObject.Find("ItemText").GetComponent<TextMeshProUGUI>();
ItemText.text = "내용1";
개체를 3개 생성했는데 첫 번째 개체에만 텍스트가 적용됩니다????
제가 생각했던 개체에 접근되지 않을 때는 인스턴스 ID(Instance ID)를 확인해 봐야 합니다.
Debug.Log(string.Format("ItemText : {0}, {1}"
, ItemText.gameObject.GetInstanceID() //텍스트 개체
, this.gameObject.GetInstanceID())); //내 오브젝트
텍스트 개체의 아이디가 같은 것을 알 수 있습니다.
'GameObject.Find'로 검색하면 모든 계층을 검색하게 됩니다.
(참고 : Uniny Documentation - GameObject.Find )
'GameObject.Find'는 프리팹으로 클론된 개체 안에서 사용하여도 계층 구조상 처음 만난 개체를 리턴합니다.
제가 의도한 검색을 하려면 프리팹 안에 있는 자식 중에 검색해야 하므로 'gameObject.transform.Find'를 사용해야 합니다.
( 참고 : Uniny Documentation - Transform.Find )
TextMeshProUGUI ItemText
= this.gameObject.transform.Find("ItemText")
.GetComponent<TextMeshProUGUI>();
ItemText.text = "내용1";
인스턴스 ID도 다르게 출력되는 것을 알 수 있습니다.
보통은 'gameObject.transform.Find'을 사용하기 때문에 이런 문제가 없었는데......
매인 컨트롤러에서 사용하던 코드를 복사해서 사용하다가 이런 문제가 발생했습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ
그래서 찾는데 하루를 날렸버렸....
성능 이슈 때문에라도 'GameObject.Find'는 자제하는 게 좋습니다.