Learning
When: 1학년 5월 6일
How:
슬슬 주제가 다 떨어져가서 일단 게임을 만들고 있었는데, 저는 보통 게임 오브젝트를 변수에 담을 때, SerializeField로 변수를 선언하여 직렬화한 다음, 오브젝트를 드래그하는 방식으로 담았습니다. 그런데 수업 시간에 GameObject.Find() 메서드를 사용하여 게임 오브젝트를 변수에 담는 방법을 배운 것이 기억나서 무엇이 더 효율적인지, 현직에선 무엇을 자주 쓰는지 궁금해져서 공부를 해보았습니다.
Understanding:
게임 오브젝트를 코드에서 가져오는 방법은 크게 4가지가 있는데, 제가 배운 GameObject.Find()는 string 형식이라 직관적이지만 철자가 하나라도 틀리면 찾을 수 없다는 단점이 있고, 성능도 나빴습니다. 그리고 제가 사용하는 직렬화 후 드래그는 빠르고 성능에 좋지만, 제가 느낀 대로 직접 드래그하는 것이 까먹기도 했고 귀찮은 단점이 있었습니다. 그리고 GameObject.FindWithTag()(단일 개체)와 FindGameObjectsWithTag()(배열 반환) 메서드로 tag를 사용해서 오브젝트를 찾는 방법이 있었는데, 이 방법은 단일 개체를 찾고 싶을 때, tag가 앞으로도 한 개가 될 것이라고 무조건 확신할 수 없는 상황이라면 사용하기 힘들 것입니다. 그리고 마지막으로 부모와 자식 관계를 이용해 찾는 것인데, transform.Find() 메서드를 사용해서 자식 중에서만 찾는 방식 또는 GetChild()로 인덱스 값을 이용해 찾는 방법이 있습니다.
Result: 드래그 방식은 성능에 좋아서 불편함을 감수하고 사용하면 큰 문제는 없지만, Find() 메서드는 많이 사용하면 성능에 무리가 갈 수 있다는 사실을 알자.
'UnityEngine' 카테고리의 다른 글
| [Unity] TextMeshPro vs TextMeshProGUI (0) | 2025.05.08 |
|---|---|
| [Unity] Particle System같은 타입 변수 만들기 (0) | 2025.05.07 |
| [Unity] OnTrigger, OnCollision 메서드 실행 (0) | 2025.05.02 |
| [Unity] 여러가지 이동 방식 (0) | 2025.05.02 |
| [Unity] Monobehaviour 스크립트의 구동 (0) | 2025.04.28 |