본문 바로가기

Unity3d

유니티 마스터하기: 충돌 감지 및 처리 메커니즘 상세 가이드

게임 개발에서 충돌 감지는 오브젝트 간의 상호작용을 만드는 데 필수적인 부분입니다. 유니티에서는 다양한 충돌 감지 방법과 처리 기법을 제공하고 있는데, 이번 포스팅에서는 유니티의 충돌 감지 및 처리 방법에 대해 자세히 살펴보고, 이를 활용하는 방법을 실제 예제 코드와 함께 알아보겠습니다.

 

Collider 컴포넌트와 Rigidbody

 

유니티에서 충돌 감지를 위해서는 두 개의 오브젝트 모두에 Collider 컴포넌트가 있어야 하며, 최소 하나의 오브젝트에 Rigidbody 컴포넌트가 붙어있어야 합니다. Collider는 'Box Collider', 'Sphere Collider', 'Capsule Collider' 등 여러 형태가 있으며, 오브젝트의 물리적 경계를 정의합니다.

 

충돌 감지 이벤트

 

충돌 감지를 위한 주요 이벤트에는 OnCollisionEnter, OnCollisionStay, OnCollisionExit 등이 있으며, 이 이벤트들은 오브젝트가 다른 Collider와 상호작용할 때 자동으로 호출됩니다.

 

OnCollisionEnter

 

OnCollisionEnter 이벤트는 두 오브젝트가 충돌할 때 처음 호출됩니다. 아래는 충돌을 감지하고 로그를 출력하는 기본적인 코드 예제입니다.

 

void OnCollisionEnter(Collision collision)
{
    Debug.Log("충돌 감지: " + collision.gameObject.name);
}

 

OnCollisionStay

 

OnCollisionStay 이벤트는 오브젝트가 충돌하고 있는 동안 매 프레임마다 호출됩니다. 이는 오브젝트가 계속해서 충돌하고 있는 상태를 체크할 때 유용합니다.

 

void OnCollisionStay(Collision collision)
{
    Debug.Log("충돌 유지 중: " + collision.gameObject.name);
}

 

OnCollisionExit

 

OnCollisionExit 이벤트는 오브젝트가 충돌한 상태에서 벗어났을 때 호출됩니다. 이는 충돌이 끝난 것을 감지하는 데 사용됩니다.

 

void OnCollisionExit(Collision collision)
{
    Debug.Log("충돌 종료: " + collision.gameObject.name);
}

 

충돌 정보 사용하기

 

Collision 클래스는 충돌에 대한 다양한 정보를 포함하고 있습니다. 예를 들어, collision.contacts는 충돌 지점의 정보를 배열로 가지고 있으며, collision.relativeVelocity는 충돌하는 두 오브젝트 간의 상대 속도를 제공합니다.

 

void OnCollisionEnter(Collision collision)
{
    foreach (ContactPoint contact in collision.contacts)
    {
        Debug.DrawRay(contact.point, contact.normal, Color.red);
    }

    Debug.Log("상대 속도: " + collision.relativeVelocity);
}

 

Trigger 이벤트

 

유니티에서는 Collider를 'Trigger'로 설정하면 실제 물리 충돌 없이 이벤트를 감지할 수 있습니다. 이 경우 OnTriggerEnter, OnTriggerStay, OnTriggerExit 이벤트를 사용할 수 있습니다.

 

void OnTriggerEnter(Collider other)
{
    Debug.Log("트리거 진입: " + other.gameObject.name);
}

void OnTriggerStay(Collider other)
{
    Debug.Log("트리거 유지 중: " + other.gameObject.name);
}

void OnTriggerExit(Collider other)
{
    Debug.Log("트리거 벗어남: " + other.gameObject.name);
}

 

레이어와 물리 설정

 

충돌 감지를 최적화하기 위해 유니티에서는 레이어를 사용하여 특정 오브젝트 그룹 간의 충돌만을 감지하도록 설정할 수 있습니다. 이는 Project Settings의 Physics 섹션에서 'Layer Collision Matrix'를 통해 설정할 수 있습니다.

 

충돌 감지 및 처리는 게임 내에서 오브젝트 간의 다양한 상호작용을 생성하는 데 중요합니다. 이번 포스팅에서 소개한 기법들을 통해 여러분은 유니티에서 더욱 사실적이고 다이나믹한 게임 경험을 제작할 수 있을 것입니다. 다음 포스팅에서는 이러한 충돌 처리 기법을 활용하여 복잡한 게임 메커니즘을 구현하는 방법에 대해 더 깊이 다루어보겠습니다. 계속해서 지켜봐 주세요!