유니티 LayerMask

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);
    }
}