오늘은 2d 프로젝트에서 지정된 범위 내 찾고 싶은 오브젝트가 있는지 감지하는 기능을 overlap메서드를 사용해보겠습니다.
지정된 범위 내부에 있는 원하는 오브젝트를 찾을 수 있는 기능입니다.
Physics2D.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에 담은 후 출력하도록 만들었습니다.
기즈모를 그려 범위를 확인할 수 있습니다.
color로 색을 지정.
Gizmos.DrawWireSphere(플레이어위치, 범위)
void OnDrawGizmos() // 범위 그리기
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, FindRange);
}
이렇게!
마지막 감지 오브젝트 출력 결과!
만약 여러 오브젝트를 한번에 감지하면서 사용할려면
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);
}
}