LayerMask란?
레이어 기반 작업을 단순화하는 기능입니다. 32비트 정수로 표시되는 Bit Mask를 사용하면 특정 레이어에서 대상 작업을 필터링하고 수행할 수 있습니다.
LayerMask 함수
LayerMask.GetMask
원하는 레이어의 이름을 지정하여 LayerMask를 구성합니다. 예를 들어 LayerMask.GetMask("Player", "Enemy")를 사용하여 "Player" 및 "Enemy" 레이어를 모두 포함하는 LayerMask를 만들 수 있습니다.
LayerMask.GetMask의 목적은 원하는 레이어의 이름을 지정하여 '비트마스크를 생성'하는 것입니다. Index가 0부터 시작하여 지정된 각 레이어에 대해 1씩 증가하는 인덱스를 레이어에 자동으로 할당합니다.
예를 들어, "Pickupable"이라는 이름의 레이어가 8번 레이어라면, LayerMask.GetMask("Pickupable")는 1 << 8 (즉, 256 값)을 반환합니다.
LayerMask.NameToLayer
레이어 이름을 해당 Index로 변환이 필요할 때 사용할 수 있습니다. 예를 들어 LayerMask.NameToLayer("Player")는 "Player" 레이어의 인덱스(int)를 반환합니다.
LayerMask.LayerToName
레이어 Index를 해당 이름으로 변환이 필요할 때 사용할 수 있습니다. 예를 들어 LayerMask.LayerToName(8)은 인덱스 8인 레이어의 이름을 검색합니다.
LayerMask.value
LayerMask의 비트마스크 값을 나타냅니다. 이 값을 수정하거나 검색하여 다양한 작업을 효율적으로 수행할 수 있습니다.
LayerMask.Contains
LayerMask 내에 특정 레이어 인덱스가 포함되어 있는지 여부를 확인할 수 있습니다. 예를 들어 'myLayerMask.Contains(5)'는 LayerMask에 인덱스가 5인 레이어가 포함된 경우 true를 반환합니다.
예제 코드
using UnityEngine;
public class LayerMaskExample : MonoBehaviour
{
void Start()
{
LayerMask myLayerMask = LayerMask.GetMask("Player", "Enemy");
int playerLayerIndex = LayerMask.NameToLayer("Player");
int enemyLayerIndex = LayerMask.NameToLayer("Enemy");
Debug.Log("Player layer index: " + playerLayerIndex);
Debug.Log("Enemy layer index: " + enemyLayerIndex);
string playerLayerName = LayerMask.LayerToName(playerLayerIndex);
string enemyLayerName = LayerMask.LayerToName(enemyLayerIndex);
Debug.Log("Player layer name: " + playerLayerName);
Debug.Log("Enemy layer name: " + enemyLayerName);
bool containsPlayerLayer = myLayerMask.Contains(playerLayerIndex);
bool containsEnemyLayer = myLayerMask.Contains(enemyLayerIndex);
Debug.Log("LayerMask contains Player layer: " + containsPlayerLayer);
Debug.Log("LayerMask contains Enemy layer: " + containsEnemyLayer);
}
}