비트 이동을 사용하면 한 물리 연산에서 여러 레이어를 고려할 수 있습니다.
Physics.Raycast(ray, out hitInfo, Mathf.Infinity, layerMask )
비트 시프 팅이 없으면 한 레이어에서 하나의 레이어에만 레이 캐스트 할 수 있습니다. 비트 이동을 사용하면 여러 특정 레이어에서 레이 캐스트 할 수 있습니다.
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
특정 레이어를 제외한 모든 레이어에서 레이 캐스트 할 수도 있습니다.
layerMask = (1 << LayerMask.NameToLayer("MyLayer1")) | (1 << LayerMask.NameToLayer("MyLayer2")) ;
layerMask = ~layerMask;
Unity 의 "Layer manager" 를 보면 레이어는 단순한 1 차원 배열의 인덱스로 볼 수 있습니다 .
편집 : 전에는 본 적이 없지만 LayerMask
클래스에는 레이어 이름이 지정된 "계산 된"레이어 마스크를 가져 오는 유틸리티 함수가 있습니다.
Debug.Log( LayerMask.GetMask("UserLayerA", "UserLayerB") ) ;
가정 UserLayerA
및 UserLayerB
제 10 및 제 열한번째 층이다. 이것의 사용자 레이어 값은 10과 11입니다. 레이어 마스크 값을 얻기 위해 이름을 GetMask로 전달할 수 있습니다. 인수는 이름 목록이거나 이름을 저장하는 문자열 배열 일 수 있습니다. 이 경우 반환 값은 2 ^ 10 + 2 ^ 11 = 3072입니다.
설명서 링크 : https://docs.unity3d.com/ScriptReference/LayerMask.GetMask.html