비트 마스크를 이용한 레이어 포함 여부 확인

심지태
∙∙조회 8
csharp
using UnityEngine;
using UnityEngine.AI;

public class TEST : MonoBehaviour
{
    [SerializeField] NavMeshAgent agent;
    [SerializeField] Camera mainCamera;
    [SerializeField] LayerMask groundMask;

    void Awake()
    {
        agent = GetComponent<NavMeshAgent>();
        mainCamera = Camera.main;
    }

    void Update()
    {
        if (!Input.GetMouseButtonDown(1))
        {
            return;
        }

        Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out RaycastHit hit, 200f))
        {
            LayerMask hitLayer = hit.collider.gameObject.layer;
            if (((1 << hitLayer) & groundMask) != 0)
// gameObject.layer는 레이어 인덱스(0~31)이며, 1 << hitLayer는 해당 비트만 1인 비트 마스크를 생성한다.
// 비트 AND(&) 연산으로 생성한 마스크와 groundMask에 공통으로 설정된 비트가 있는지 확인한다.
// 결과가 0이 아니면 충돌한 GameObject의 레이어가 groundMask에 포함되어 있다는 뜻이다.
            {
                agent.SetDestination(hit.point);
            }
        }
    }
}