[Unity-2d] 일정 범위 내 충돌체 감지(Overlap)

Mando_727·2023년 8월 13일
0

Unity

목록 보기
6/6
post-thumbnail

오늘은 2d 프로젝트에서 지정된 범위 내 찾고 싶은 오브젝트가 있는지 감지하는 기능을 overlap메서드를 사용해보겠습니다.

Overlap이란?

지정된 범위 내부에 있는 원하는 오브젝트를 찾을 수 있는 기능입니다.

Overlap 종류

Physics2D.Overlap을 치면 이렇게 많은 종류들을 확인할 수있습니다.
저는 동그란 범위를 사용하기 위해 Physics2D.OverlapCircle()메서드를 사용하겠습니다.
다양한 모양의 감지모형이 있으니 구글링해 사용하면 됩니다! 전 동그라미

Overlap 사용방법

Physics2D.OverlapCircle(플레이어,범위,레이어 선택(해당 레이어만 감지));

public class AllyController : MonoBehaviour
{
    public LayerMask EnemyLayer; //레이어 선택
    float FindRange = 4f; //범위

    void Update()
    {
        var EnemyObj = Physics2D.OverlapCircle(transform.position, FindRange, EnemyLayer);
        print(EnemyObj); //결과 출력
    }

}

코드와 같이 LayerMask, Range를 설정할 수 있도록 선언한 뒤 overlap메서드를 사용하여 EnemyObj에 담은 후 출력하도록 만들었습니다.

OnDrawGizmos()를 통해 씬에서 범위확인

기즈모를 그려 범위를 확인할 수 있습니다.
color로 색을 지정.
Gizmos.DrawWireSphere(플레이어위치, 범위)

void OnDrawGizmos() // 범위 그리기
    {
        Gizmos.color = Color.red;
        Gizmos.DrawWireSphere(transform.position, FindRange);
    }

이렇게!

마지막 감지 오브젝트 출력 결과!

Physics2D.OverlapCircleAll()

만약 여러 오브젝트를 한번에 감지하면서 사용할려면
Physics2D.OverlapCircleAll을 사용하여 감지된 오브젝트는 배열에 저장시켜주어 사용할 수 있습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class SelectTouch : MonoBehaviour
{
    public Collider2D[] colliders = new Collider2D[10]; //배열 선언
    public float radius; //범위
    public LayerMask ObjectLayer; // 레이어 선택
    
    private void Update()
    {
        colliders = Physics2D.OverlapCircleAll(targetPos, radius, ObjectLayer);
    }
}

0개의 댓글