728x90

Raycast를 사용해서 물체의 정보를 받아오는 중 다른 오브젝트가 만약 중간에 있다면 ray를 관통해서 계속해서 정보를 받아오지 못하는 문제가 있습니다 

 

이럴 때 중간에 물체가 있어도 계속해서 정보를 받아오고 싶을 때 쓰는 것이 LayerMask입니다.

 

LayerMask를 이용해서 한번 물체를 검사해 보겠습니다.

 

 

 

먼저 Inspector창에서 Add Layer를 눌러 레이어를 하나 추가해 주겠습니다

저는 downhill이라는 레이어를 추가해 주었습니다.

 

스크립트로 레이어를 가져오는 방법은 여러 가지가 있습니다.

 

1. LayerMask.GetMask("레이어name")

    bool downhillroad = false;
    
       void Update()
    {
        downhillroad = Physics.Raycast(transform.position, Vector3.down, 1f, LayerMask.GetMask("downhill"));

        if (downhillroad)
            //실행~
        if (!downhillroad)
            //중지~
    }

 

Physics.Raycast에서 마지막 인자는 체크할 레이어를 입력하는 부분입니다 여기서 LayerMask.GetMask를 하면 레이어를 지정해서 받아올 수 있습니다.

 

2. LayerMask 변수를 public 선언 후 inspector 창에서 지정 

    public LayerMask downhillCheck;
    
     void Update()
    {
        downhillroad = Physics.Raycast(transform.position, Vector3.down, 1f, downhillCheck);

        if (downhillroad)
            //실행~
        if (!downhillroad)
            //중지~
    }

 

 

Nothing을 클릭하면 레이어 목록이 뜨고 그중 체크할 레이어를 선택하면 됩니다.

 

3. int 변수를 선언하고 Layer의 번호를 받아온다

  int downhillLayer;
  
      void Start()
    {
        downhillLayer = 1 << LayerMask.NameToLayer("downhill");
    }
     void Update()
    {
        downhillroad = Physics.Raycast(transform.position, Vector3.down, 1f ,downhillLayer);
        if (downhillroad )
            //실행~
        if (!downhillroad )
            //중지~
    }

 

위 사진과 같이 Layer들은 각각 번호가 있습니다 그래서 위 사진처럼 사용할 수 있고

 

만약 한 개의 Layer가 아닌 두 개 이상, 또는 해당 레이어를 제외할 수 있습니다.

 

    void Start()
    {
 downhillLayer = 1 << LayerMask.NameToLayer("downhill"); //하나의 레이어체크

downhillLayer = (1 << LayerMask.NameToLayer("downhill") + (1 << LayerMask.NameToLayer("uphill"))); //두개의 레이어체크

downhillLayer = (-1) - (1 << LayerMask.NameToLayer("downhill")); //해당 레이어를 제외
    }

    void Update()
    {
        downhillroad = Physics.Raycast(transform.position, Vector3.down, 1f ,downhillLayer);
   
        if (downhillroad )
            //실행~
        if (!downhillroad)
            //중지~
    }

 

참고가 되었으면 좋겠습니다~

728x90

+ Recent posts