티스토리 뷰

※금일은 간단한내용으로 작성될 예정이다.


유니티로 작업하다 보면 '물체를 판별'해야 하는 경우가 매우 빈번하게 발생한다.

유니티에는 이러한 '물체를 판별'할 수 있는 기능이 몇 개 있는데, 이에 대해서 알아보자.


Layer [레이어]

기본적으로 사용되는 물체 판별용 기능.

최대 32개(이 중 고정값 5개)의 레이어를 설정하여 인스턴스에 부여한다.

이를 통해서 설정에서 아예 충돌하지 않게끔 구성도 가능하고, 다양한 종류의 대상을 한 번에 판별할 수도 있다.

거기다가 bit값으로 판별하기 때문에 판별 속도도 빠른 편.

실제로 다양한 기능에서 이 Layer를 기준으로 대상을 판별하도록 구성되어 있다.

이러한 특성 상, 유니티를 다루는 이상 '반드시' 익숙해져야 하는 기능.

그럼, 판별 방법을 알아보자.

 

LayerMask

bit값으로 각 레이어 별 대상 여부를 선택하는 변수로, 대부분의 Layer로 대상 판별을 하는 메서드에서 활용하는 구분법.

이외에도 개발자가 직접 이를 이용한 판별 공식을 세울 수도 있다. 아래를 참고하자.

if((LayerMask & 1 << target.gameObject.layer) != 0)

이 조건문을 이용해서 대상 여부를 판별할 수 있다.

간단하게 해석하면, 1을 대상 오브젝트의 layer 만큼 비트 이동시킨 이후 LayerMask와 비교하는 공식이다.

이 코드를 이용해서 복수의 Layer를 한 번에 판별하는 것도 가능하다.

 

물론, 레이어의 숫자를 이용하거나 문자열을 이용하는 방법도 있긴 하나, 저 방법이 압도적으로 범용성이 높고 활용하기도 좋다. 가능하면 해당 방식에 익숙해지도록 하자.


Tag [태그]

Layer가 32개의 갯수 제한이 있다는 점을 보완하기 위한 판별 기준.

Layer와는 달리 문자열로 비교하기 때문에 갯수 제한이 없다. 대신 속도는 조금 느리다.

대신 코드가 정말로 직관적인 편이다. 문자열인 이상 오타에 약하긴 하지만...

 

gameObject.CompareTag(string tag)

태그를 기준으로 판별을 행하는 함수로, Layer와는 다르게 유니티 상에서 기본적으로 지원하는 함수다.

당연하지만, bool 값을 반환하기 때문에 if문과 함께 사용해야 한다.


이외에도 GetComponent의 결과가 null인지를 이용해서 '컴포넌트 여부'를 판별한다거나, 컴포넌트 내부의 변수를 비교하는 방식도 있긴 하다. 다만, 둘 다 일단은 '컴포넌트를 받아와야 해서' 위 두 방법 보다 훨씬 무거운 방법이다.

다만, 일단 '충돌 인스턴스의 내부 컴포넌트의 함수를 사용하려면 반드시 사용해야 하는 절차'라서, 이래저래 이쪽도 꽤 자주 사용되는 모양.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함