반응형
유니티 프로그램을 개발하면서 Tag를 사용할 때가 많습니다.
제가 현재 개발하고 있는 게임에서는 플레이어와 몹이 충돌했는지 여부를 판단하기 위해 태그를 사용하고 있습니다. 아래 소스와 같이 태그를 비교하기 위해 CompareTag 메서드를 사용했습니다.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Monster"))
{
// Monster 충돌 처리
}
}
사실 tag는 string 문자열이기 때문에 아래와 같이 비교해도 됩니다.
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag.Equals("Monster"))
{
// Monster 충돌 처리
}
}
그렇다면, 굳이 CompareTag() 메서드를 사용해야하는 이유는 무엇일까요?
유니티에서 game Object에서 문자열을 가져오기 위해 문자열의 복사본을 생성합니다. 복사본이 생성되기 때문에 GC(Garbage Collect)가 필요합니다. 발생되는 GC로 인해 성능이 떨어지게 됩니다. 도서 "Unity 5 Game Optimization by Chris Dickinson"에 따르면 CompareTag() 메서드를 사용하는 것이 최대 27%까지 성능 향상이 가능하다고 합니다.
참조:
https://answers.unity.com/questions/200820/is-comparetag-better-than-gameobjecttag-performanc.html
반응형
'Unity' 카테고리의 다른 글
[Unity] sprite 동적으로 변경하기(Resources.LoadAll) (1) | 2020.07.03 |
---|---|
[Unity] Coroutine VS Invoke (0) | 2020.04.11 |
[Unity] Update() vs FixedUpdate() (0) | 2020.04.09 |
[Unity] Circular Progress Bar(원형 진행바) 구현하기 (2) | 2020.04.08 |