Trigger란 무엇인가?

  1. Trigger의 정의:

    • Trigger는 Collider의 영역 안으로 다른 객체가 진입했는지, 나갔는지, 혹은 체류하고 있는지를 감지할 수 있는 기능입니다.
    • 물리적인 충돌 효과(예: 튕김, 밀림 등)는 발생하지 않으며, 논리적인 감지에만 사용됩니다.
  2. Trigger의 장점:

    • 물리 연산이 필요하지 않은 경우 사용하여 성능을 최적화할 수 있습니다.
    • 충돌 영역을 단순히 감지하는 로직을 작성할 때 유용합니다.
  3. Trigger의 특징:

    • Collider의 IsTrigger 속성이 켜져 있어야 동작합니다.
    • Trigger 이벤트는 OnTriggerEnter, OnTriggerStay, OnTriggerExit 함수를 통해 처리됩니다.
    • Trigger는 Rigidbody가 있는 객체와 상호작용할 때도 유용합니다.

Trigger 이벤트 발생 조건

  1. Collider 필요:

    • Trigger 이벤트를 발생시키기 위해서는 나와 상대방 모두 Collider 컴포넌트를 가지고 있어야 합니다.
  2. IsTrigger 설정:

    • 나 또는 상대방 중 하나 이상의 ColliderIsTrigger = true로 설정되어 있어야 합니다.
  3. Rigidbody 필요:

    • 나와 상대방 중 하나 이상Rigidbody 컴포넌트를 가지고 있어야 합니다.
    • Rigidbody의 IsKinematic 설정 여부는 상관없습니다.

Trigger 이벤트 함수

  1. OnTriggerEnter(Collider other)

    • 다른 객체가 Trigger Collider 영역에 진입했을 때 호출됩니다.
    • other는 진입한 객체의 정보를 포함합니다.
  2. OnTriggerStay(Collider other)

    • 다른 객체가 Trigger Collider 영역 내부에 머무르는 동안 호출됩니다.
    • 호출 빈도가 높으므로 성능에 주의해야 합니다.
  3. OnTriggerExit(Collider other)

    • 다른 객체가 Trigger Collider 영역에서 나갈 때 호출됩니다.

Trigger 관련 예제 코드 분석

private void OnTriggerEnter(Collider other)
{
    Debug.Log($"Trigger @ {other.gameObject.name})!");
}

코드 분석:

  1. OnTriggerEnter 함수:

    • Unity의 Trigger 이벤트 중 하나로, 다른 객체가 Collider 범위에 진입했을 때 호출됩니다.
  2. Collider other:

    • Trigger 범위에 들어온 객체의 정보를 담고 있습니다.
    • 주요 속성:
      • other.gameObject: Trigger 범위에 들어온 객체의 GameObject.
      • other.transform: 객체의 Transform 정보.
  3. Debug.Log(...):

    • Trigger 범위에 진입한 객체의 이름을 콘솔에 출력합니다.
    • 예를 들어, Trigger 범위에 진입한 객체가 "Player"라면, Trigger @ Player)!가 출력됩니다.

Trigger 활용 예시

  1. 몬스터와 칼의 충돌 감지:

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Monster"))
        {
            Debug.Log("몬스터가 칼에 닿았습니다!");
            other.gameObject.GetComponent<Monster>().TakeDamage(10);
        }
    }
    • 칼의 Trigger 영역에 몬스터가 들어오면 TakeDamage() 함수를 호출하여 몬스터의 체력을 감소시킵니다.
  2. 특정 공간에 들어갔을 때 텔레포트:

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            Debug.Log("플레이어가 텔레포트 영역에 진입했습니다!");
            other.gameObject.transform.position = new Vector3(0, 10, 0); // 텔레포트
        }
    }
    • 플레이어가 특정 공간(Trigger)에 들어가면 다른 위치로 텔레포트 시킵니다.

Trigger와 Collision 비교

기능CollisionTrigger
물리적 반응실제 물리적 반응 (예: 튕김, 밀림)물리적 반응 없음
목적물리적인 충돌 처리범위 내 진입 여부 감지
필요 조건Rigidbody 필수, IsTrigger = falseRigidbody 필수, IsTrigger = true
사용 예시충돌 기반 물리 연산영역 감지, 논리적 처리

Trigger 발생 조건 매트릭스 분석

  1. Trigger 이벤트가 발생할 수 있는 경우:

    • 두 객체 모두 Collider를 가져야 함.
    • 나 또는 상대방 중 하나 이상이 IsTrigger = true여야 함.
    • 나 또는 상대방 중 하나 이상이 Rigidbody를 가져야 함.
  2. 테이블 이미지 분석:

    • 이미지에서 "Y"로 표시된 조합은 Trigger 이벤트가 발생할 수 있는 경우를 나타냄.
    • 예를 들어:
      • Static Trigger Collider와 Dynamic Trigger Collider 간의 충돌: 가능 (Y).
      • Static Trigger Collider와 Kinematic Collider 간의 충돌: 가능 (Y).

Trigger의 장점 및 활용

  1. 장점:

    • 물리 연산 없이 객체의 진입, 나감, 체류를 확인할 수 있어 성능 최적화에 유리.
    • 충돌 효과가 필요 없는 상황에서 적합.
  2. 활용 사례:

    • 특정 구역에 들어갔는지 확인 (텔레포트, 스폰, 이벤트 발동).
    • 무기와 몬스터 간의 접촉 판별.
    • 특정 아이템 획득 여부 확인.

profile
李家네_공부방

0개의 댓글