GetComponent<T>() 사용에 대해
유니티로 게임을 개발하고
스크립트에서 GetComponent는 자주 사용되는 문법이다.
특정 오브젝트의 Component를 가져와
컨트롤 할 수 있어 꽤 유용하다.
하지만 함수 자체가 많이 무겁다.
빈번하게 동작되는 함수(Update 등등의 이벤트함수)에서 사용하거나
루프를 돌면서 쓰거나하면
게임의 성능이 저하된다.
그래서 생각을 잘하여 사용하여야 하는데
보통은 Awake나 Start 함수에서 한번 전역 변수에 할당해주고
변수로 사용을 많이 하게 된다.
하지만 그 외에도 고려해야 하는 방식이 있는데
GetComponent를 사용하는 스크립트가 포함된
오브젝트가 얼마나 자주 새로 생성되느냐 이다.
쉽게 예를 들어서 설명해 보자.
런 게임이 하나 있다.
캐릭터 오브젝트가 있고
코인 오브젝트가 있다.
캐릭터 오브젝트는 단일 오브젝트고
코인은 개별적으로 하나하나 생성된다.
코인을 먹었을 때 나오는 음원 AudioSource의 clip을 Play 하고자 한다.
먹는 순간 Play를 해야 하므로 미리 AudioSource를 할당 받아야 한다.
그렇다면
코인을 먹었을 때 나오는 음원 AudioSource 를 어디에 둘 것인가?
라는 문제가 발생한다.
코인을 먹는 소리이기 때문에 코인 종속일 것 같다는 생각이 먼저 들수 있지만
코인 하나하나 생성될 때 마다 Awake나 Start에서 GetComponent를 한다면
코인이 100개 라면 100번 GetComponent된다는 것이다.
성능이 생각만 해도 뚝뚝 떨어진다.
캐릭터도 코인을 먹을 때를 체크 할 수 있고
단일 오브젝트이므로
캐릭터의 자식으로
AudioSource를 GetComponent하는 것이 바람직하다.
몇 백의 코인을 먹어도
AudioSource를 가져오기 위한
GetComponent를 캐릭 한번만 사용하므로
게임 성능 저하가 거의 없다.
동적으로 생성되거나
수가 많을 오브젝트의 경우는
GetComponent의 사용을 최소화 하자.
'공부 > Unity' 카테고리의 다른 글
Unity Scene Change(씬 바꾸기) (0) | 2016.06.04 |
---|---|
AudioSource 다중 사용 (0) | 2016.06.03 |
다중 트리거(Trigger) 조작 문제 (0) | 2016.06.01 |
splat map (0) | 2016.05.30 |
[잡담]유니티에서 구현하는 2D에 관련하여 (0) | 2016.05.27 |