
무언가와 충돌해서 상호 작용을 하는 메서드 등의 조건문 안에는 주로 부딪힌 오브젝트의
Tag의 문자열을 검사하는 방식이 주로 쓰이고 있다.
나 역시 마찬가지였는데, 큰 프로젝트는 아니지만 문자열 검사보다 속도도 빠르고 성능적으로도 유리한 비트 연산을 이용해보려고 한다.

익히 아는 그 녀석, 자세한 설명은 생략한다.

속도 상으론 위의 Tag 문자열 검사보다는 빠르다.
하지만 레이어 비트 연산보다는 느리다.
p.s 레이어 번호 7,8,9 번은 현재 프로젝트에서 땅, 플랫폼, 몬스터 등에 사용하고 있는 중이라, 각자 검사 할 레이어 번호에 맞게 변경해서 대입하면 됩니다.

성능 상으로 제일 빠르고 좋다.
일부 튜터님들이 좋아하신다.
조건문 안의 비트 연산 각 단계를 설명하자면 크게 세 가지이다.
1 << collision.gameObject.layer: 충돌한 객체의 레이어를 비트 마스크로 변환
((1 << 8) | (1 << 9)): "Ground" 레이어와 "Platform" 레이어에 대한 비트 마스크를 결합
(검사 레이어가 2개 이상인 경우)
!= 0: 비트 연산문을 Bool 타입으로 만들어 준다.
이 부분이 없으면
암시적으로int형식을bool형식으로 변환할 수 없다는 오류가 발생한다.
< 오류 발생 이유 >
C#에서는 조건문 안의 표현식이bool타입이어야 하는데
비트 연산의 결과는int타입이기 때문에 '!= 0' 을 조건문에 추가하고 비트 연산의 결과가0이 아닌지를 확인하여bool표현식을 만들어주어야 조건문 안에 쓸 수 있다.
연산 비용이 차이가 나는 이유는 각 연산의 복잡성과 메모리 접근(사용) 방식에서 기인한다.
요약
비트 연산은 가장 기본적인 수준의 연산으로 다른 두 방식의 연산보다빠르다.
직접적인 체감은 크지 않지만, 성능이 정말 중요한 상황에서는 가능하다면 비트 연산을 사용하는 것이 좋을지도?

충돌한 오브젝트의 레이어 변경을 할 때도, NameTOLayer 방식 대신 레이어 숫자를 통해 변경해주어 코드의 가독성 + 성능을 잡을 수 있었다.