Unity

[Unity][방법] Object충돌(Collision)_4 RayerMask 사용하기

usingsystem 2022. 10. 5. 16:16
728x90

RayerMask를 사용하면 내가 연산하고 싶은 오브젝트만 사용할 수 있다.

RayerMask는 비트플레그(Int32)를 사용한다.

아래와 같이 User Layer8, User Layer9는 비트플레그를 사용하면 각각  256, 512의 10진수이다.

  • User Layer8, User Layer9를 비트연산자로 사용할 경우
           int mask = (1 << 8) | (1 << 9);
 if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            int mask = (1 << 8) | (1 << 9);//int32 -> 비트연산

            Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100.0f, mask))
            {
                Debug.Log($"Raycast Camera @ {hit.collider.gameObject.name}");
            }
        }
  • User Layer8, User Layer9를 이름으로 접근하는 방법
  LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Well");
 if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Well");

            Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100.0f, mask))
            {
                Debug.Log($"Raycast Camera @ {hit.collider.gameObject.name}");
            }
        }
728x90