유니티

범위 내 콜라이더 판별 (OverlapSphere)

잼잼재미 2024. 1. 17. 10:41

 

OverlapSphere (3D)


  • 3D 공간에서 구 형태의 영역 안의 모든 콜라이더를 검출
  • Layer 설정으로 원하는 Layer만 검출 가능 (설정하지 않으면 모든 콜라이더 검출)
  • 중심 위치와 반지름으로 구 생성
  • Collider 배열을 초기화 하지 않고도 사용가능 하지만 초기화하지 않으면 오류가 발생할 수도 있으므로 초기화 후, 사용
  • 2D에서는 Physics2D.OverlapCircleAll를 사용

 

private LayerMask _layerMask;
[SerializeField] private Collider[] _targets;
[field : SerializeField] public float OverlapSphereRange { get; private set; }

private void Start()
{
	_targets = new Collider[20];
    _layerMask = LayerMask.NameToLayer("Unit");
    StartCoroutine(COTargetting());
}

IEnumerator COTargetting()
{
    while(true)
    {
        Targetting();

        yield return new WaitForSeconds(1f);
    }
}

private void Targetting()
{
    int layerMask = (1 << _layerMask);	// Layer 설정
    _targets = Physics.OverlapSphere(transform.position, OverlapSphereRange, layerMask);
}

// 오브젝트를 클릭하면, 에디터에서 구 확인
void OnDrawGizmosSelected()
{
    Gizmos.color = Color.green;
    Gizmos.DrawSphere(this.transform.position, OverlapSphereRange);
}

// 에디터에서 항상 구 확인
void OnDrawGizmos()
{
    Gizmos.color = Color.green;
    Gizmos.DrawWireSphere(this.transform.position, OverlapSphereRange);
}

 

코루틴으로 1초마다 구를 생성해서 콜라이더를 확인하는 코드 예시

 

 

 

'유니티' 카테고리의 다른 글

DataManager  (0) 2024.01.30
AddForce  (0) 2024.01.26
콤보 공격 구현  (0) 2024.01.11
InputActionPhase  (0) 2024.01.11
3D 애니메이션 만들기 (믹사모)  (0) 2024.01.09