Menu
CoddyTech

레이어와 LayerMask

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 63개 중 36번째.

모든 GameObject는 하나의 레이어에 속하며, Inspector 상단의 Layer 메뉴에서 선택합니다. Unity에는 32개의 레이어가 있습니다. 일부는 기본 제공됩니다(0 Default, 2 Ignore Raycast, 4 Water, 5 UI). Tags and Layers에서 직접 이름을 지정할 수 있으며, User Layer 3부터 시작합니다. LayerMask는 레이어 집합으로, 레이어마다 비트 하나를 사용합니다. maxDistance 뒤에 이를 레이캐스트에 전달하면, 레이는 집합에 포함되지 않은 레이어의 모든 콜라이더를 무시합니다.

이 플레이어는 적의 머리 위가 아니라 지면에서 점프해야 합니다. 바닥은 Ground 레이어에 배치하고, 스크립트에 LayerMask 필드를 추가하면 Inspector에 Ground를 선택하는 메뉴가 표시됩니다.

[SerializeField] private LayerMask groundMask;

bool IsGrounded()
{
    return Physics.Raycast(transform.position, Vector3.down, 1.1f, groundMask);
}

Ground 전용 마스크를 사용하면 검사에서 플레이어를 찾는 것도 방지할 수 있습니다. 레이는 시작 지점이 내부에 있는 콜라이더는 건너뛰지만, 자식의 콜라이더와 같은 플레이어의 다른 콜라이더는 건너뛰지 않습니다. 또한 이후 수업에서 다룰 오버랩 검사에서는 플레이어 자신의 콜라이더도 감지하므로, 마스크 없이 발밑을 검사하면 항상 지면에 닿아 있다고 나옵니다. 플레이어와 자식 오브젝트를 Player 레이어에 배치하고, 검사에 사용하는 마스크에서 Player를 제외하세요. 코드에서 LayerMask.GetMask("Ground", "Platform")은 레이어 이름으로 마스크를 만들고, 마스크 앞에 ~를 붙이면 마스크에 포함되지 않은 모든 레이어로 뒤집습니다.

challenge icon

챌린지

중급

정찰병은 앞에 있는 것을 보고해야 하지만, LookAhead()는 항상 Lantern을 반환합니다. 광선은 정찰병의 몸을 건너뛰고, 정찰병은 그 안에서 시작한 다음, 정찰병이 앞에 들고 있는 랜턴에 부딪힙니다. 정찰병과 랜턴은 Player 레이어에 있습니다. Spotter의 LookAhead()를 수정하세요.

  • 코드에서 LayerMask.GetMask를 사용해 Player를 제외한 모든 레이어의 마스크를 만드세요.
  • 마스크를 레이캐스트에 전달하세요. range는 그대로 유지하여 광선이 랜턴을 지나 그 너머의 첫 번째 물체를 보고하도록 하세요.

Play를 누르고 화살표 키로 정찰병을 돌려 보세요. Console에 정찰병이 보는 것이 기록됩니다. 그런 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

public class Spotter : MonoBehaviour
{
    public float range = 10f;
    private string last = "";

    void Update()
    {
        string seen = LookAhead();
        if (seen != last)
        {
            Debug.Log("Ahead: " + seen);
            last = seen;
        }
    }

    // 앞쪽에서 range 내에 있는 첫 번째 대상의 이름, 또는 "nothing".
    public string LookAhead()
    {
        if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, range))
        {
            return hit.collider.name;
        }
        return "nothing";
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

물리와 게임플레이의 모든 레슨