Collision과 Trigger의 기본 개념

  1. Collision (충돌):

    • Collision은 물리적으로 "나와 부딪친 객체"에 대한 정보를 제공합니다.
    • 충돌을 처리하기 위해 Unity는 두 객체 간의 Rigidbody 및 Collider 상태를 고려합니다.
    • 충돌 시 OnCollisionEnter 이벤트 함수가 호출됩니다.
  2. Trigger (트리거):

    • Trigger는 물리적으로 부딪치지 않아도, Collider 범위 내로 진입한 객체를 감지할 수 있습니다.
    • Trigger는 실제 물리 연산을 수행하지 않으므로, 단순히 충돌 여부만 판별하고 싶을 때 사용합니다.
    • Trigger 이벤트를 처리하기 위해 OnTriggerEnter 함수가 호출됩니다.

Collision 이벤트 동작 조건

OnCollisionEnter 이벤트가 호출되려면 다음 조건을 충족해야 합니다:

  1. Rigidbody 필요:

    • 나 혹은 상대방 객체 중 하나 이상이 반드시 Rigidbody 컴포넌트를 가지고 있어야 합니다.
    • Rigidbody의 IsKinematic 속성이 꺼져 있어야 합니다 (IsKinematic = false).
  2. Collider 필요:

    • 나와 상대방 둘 다 Collider 컴포넌트를 가지고 있어야 합니다.
    • Collider의 IsTrigger 속성이 꺼져 있어야 합니다 (IsTrigger = false).

Trigger 이벤트 동작 조건

OnTriggerEnter 이벤트가 호출되려면 다음 조건을 충족해야 합니다:

  1. Rigidbody 필요:

    • 나 혹은 상대방 객체 중 하나 이상이 반드시 Rigidbody 컴포넌트를 가지고 있어야 합니다.
    • Rigidbody의 IsKinematic 상태는 상관없습니다.
  2. Collider 필요:

    • 나와 상대방 둘 다 Collider 컴포넌트를 가지고 있어야 합니다.
    • 둘 중 하나 이상의 Collider가 IsTrigger로 설정되어 있어야 합니다 (IsTrigger = true).

Collision과 Trigger의 주요 차이점

기능CollisionTrigger
목적물리적인 충돌 처리충돌 범위 진입 여부 확인
이벤트 함수OnCollisionEnterOnTriggerEnter
필요 조건Rigidbody가 있고, IsTrigger는 꺼짐Rigidbody가 있고, IsTrigger는 켜짐
물리 연산실제 물리적 반응 처리 (예: 튕김)물리적 반응 없음

상세 분석

Collision 관련 예제

private void OnCollisionEnter(Collision collision)
{
    Debug.Log(collision.gameObject.name);
}

분석:

  1. OnCollisionEnter 함수:

    • Unity의 Collision 이벤트를 처리하는 메서드입니다.
    • 충돌 발생 시 자동으로 호출되며, 매개변수 collision에 충돌에 대한 정보가 담깁니다.
  2. 매개변수 collision:

    • Collision 타입의 객체로, 충돌과 관련된 정보를 제공합니다.
    • 주요 속성:
      • collision.gameObject: 충돌한 객체를 나타내는 GameObject.
      • collision.collider: 충돌한 객체의 Collider.
      • collision.rigidbody: 충돌한 객체의 Rigidbody.
      • collision.relativeVelocity: 상대 속도.
      • collision.transform: 충돌한 객체의 Transform.
  3. Debug.Log(collision.gameObject.name);

    • 충돌한 객체의 이름을 콘솔에 출력합니다.
    • 예를 들어, 나에게 부딪친 객체가 "Player"라면 "Player"가 콘솔에 출력됩니다.

Trigger 관련 예제

private void OnTriggerEnter(Collider other)
{
    Debug.Log(other.gameObject.name);
}

분석:

  1. OnTriggerEnter 함수:

    • Unity의 Trigger 이벤트를 처리하는 메서드입니다.
    • Collider의 IsTrigger가 활성화된 상태에서, Collider 범위 내에 다른 객체가 진입하면 호출됩니다.
  2. 매개변수 other:

    • Collider 타입의 객체로, 범위에 진입한 객체의 정보를 제공합니다.
    • 주요 속성:
      • other.gameObject: 범위에 진입한 객체를 나타내는 GameObject.
      • other.transform: 범위에 진입한 객체의 Transform.
  3. Debug.Log(other.gameObject.name);

    • Trigger 범위에 진입한 객체의 이름을 콘솔에 출력합니다.
    • 예를 들어, 칼의 Trigger 영역에 "Enemy"가 닿았다면 "Enemy"가 콘솔에 출력됩니다.

Collision 및 Trigger의 호출 조건 요약

OnCollisionEnter 함수 조건:

  1. 나 혹은 상대방 중 하나는 Rigidbody를 가지고 있어야 함.
    • IsKinematic = false이어야 함.
  2. 나와 상대방 모두 Collider가 있어야 함.
    • IsTrigger = false이어야 함.

OnTriggerEnter 함수 조건:

  1. 나 혹은 상대방 중 하나는 Rigidbody를 가지고 있어야 함.
    • IsKinematic 상태는 상관없음.
  2. 나와 상대방 모두 Collider가 있어야 함.
    • 둘 중 하나 이상의 Collider가 IsTrigger = true이어야 함.

응용 예시

  1. Collision: FPS 게임에서 총알 충돌 처리

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            // 적 체력 감소 로직
            collision.gameObject.GetComponent<Enemy>().TakeDamage(10);
        }
    }
    • 총알이 적과 충돌하면 적의 체력을 깎는 로직을 구현.
  2. Trigger: 몬스터와 칼의 충돌 처리

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.CompareTag("Monster"))
        {
            // 몬스터 체력 감소 로직
            other.gameObject.GetComponent<Monster>().TakeDamage(15);
        }
    }
    • 칼이 몬스터의 Trigger 범위에 닿았을 때 몬스터의 체력을 깎는 로직을 구현.

profile
李家네_공부방

0개의 댓글