유니티 범위 내에 충돌체가 있는지 검사하는 법

김찬수·2023년 5월 11일
0

Unity

목록 보기
7/15

OverlapBox : 접촉한 모든 콜라이더나 내부의 박스(box)와 함께 배열을 반환
OverlapBoxNonAlloc : 접촉한 콜라이더의 개수를 반환
OverlapSphere : 접촉한 모든 콜라이더나 내부의 구체(sphere)와 함께 배열을 반환
OverlapSphereNonAlloc : 접촉한 콜라이더의 개수를 반환

아래에서 point는 OverlapBox가 시작되는 원점, size는 OverlapBox의 범위, angle은 OverlapBox 범위의 각도, layerMask는 특정 레이어만 감지하는데 사용

범위 내의 특정 오브젝트를 감지하고 싶다면 아래와 같이 사용

public으로 선언된 LayerMask 타입의 whatIsLayer를 인스펙터에서 넣어주는것을 잊지 않아야 함

    public Vector2 size;
    public LayerMask whatIsLayer;
    
    void Start()
    {
        Collider2D hit = Physics2D.OverlapBox(transform.position, size, 0, whatIsLayer);
        Debug.Log(hit.name);
    }

    // OnDrawGizmos()는 Scene 창에서 눈으로 확인하기 위함
    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireCube(transform.position, size);
    }


    public Vector2 size;
    public LayerMask whatIsLayer;

여러 개의 오브젝트를 동시에 감지하고 싶다면 OverlapBoxAll 메소드를 사용

    void Start()
    {
        Collider2D[] hit = Physics2D.OverlapBoxAll(transform.position, size, 0,            whatIsLayer);

        for (int i = 0; i < hit.Length; ++i)
        {
            Debug.Log(hit[i].name);
        }
    }

    void OnDrawGizmos()
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireCube(transform.position, size);
    }
}

추후 RayCast, BoxCast 내용 추가할 것
추후 NonAlloc 추가 (여러 개의 오브젝트 감지)

초보 개발자가 기억이 나지 않을 때 꺼내어 보기 위해 기록하는 공간입니다. 틀린 점이 있다면 댓글로 알려주시면 정말 감사하겠습니다.

profile
프로그래머 지망생

0개의 댓글