카테고리 없음

내일배움캠프 78일차 TIL 최종 프로젝트 - OnTriggerStay2D

joseph2518 2025. 1. 6. 10:00

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 이벤트를 위한 처리