20250103 / Unity_6차 17주차 금요일
OnTriggerEnter2D 로 Collider 이벤트를 처리하는 경우에
이미 대상과 겹쳐 있으면 이벤트를 타지 않는 경우가 있다.
그럴 때 사용할 수 있는 방법이 몇가지 있다.
1. OnTriggerStay2D 이벤트 활용
OnTriggerStay2D 이벤트는 Trigger Collider와 겹쳐 있는 동안 매 프레임 호출된다.
특정 타이밍에 확인이 필요하다면 이 이벤트를 활용할 수 있다.
2. Physics2D.Overlap 메서드 사용
Unity의 Physics2D 클래스에서 제공하는 OverlapCircle, OverlapBox, OverlapArea 등의 메서드를 사용하면
특정 지점이나 영역 내에 다른 Collider가 존재하는지 검사할 수 있다.
public Collider2D targetCollider; // 확인하고 싶은 대상 Collider
public LayerMask layerMask; // 확인할 레이어 마스크 (선택적)
void Update()
{
// OverlapBox를 사용한 겹침 상태 확인
Collider2D overlap = Physics2D.OverlapBox(transform.position, transform.localScale, 0, layerMask);
if (overlap != null && overlap == targetCollider)
{
Debug.Log("이미 겹쳐 있음!");
}
}
3. OnTriggerEnter2D와 OnTriggerExit2D를 함께 사용하여 상태 관리
Collider의 상태를 직접 관리하는 방식으로,
겹쳐진 상태를 bool 변수로 관리하여 특정 타이밍에 상태를 확인하는 것이다.
private bool isOverlapping = false;
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Target"))
{
isOverlapping = true;
}
}
void OnTriggerExit2D(Collider2D other)
{
if (other.CompareTag("Target"))
{
isOverlapping = false;
}
}
4. Collider Enabled 껐다 켜기
이건 내가 선택한 방법으로, 특정 순간에만 겹침을 확인하기 위해 지속적인 체크를 할 필요도 없고
코드도 단순하다.
세련된 방식은 아닐 지 몰라도 지금은 문제 없이 동작한다.
HitCollider.enabled = false; // OnTriggerEnter2D 이벤트를 위한 처리
if (LoadClass(id) == false) return false;
HitCollider.enabled = true; // OnTriggerEnter2D 이벤트를 위한 처리