Unity/기초 예제

유니티 Collider Trigger 오브젝트 충돌 처리 간단한 예제 유니티 기초

최애뎡 2021. 5. 10. 22:42
728x90
반응형

이번 예제는 간단하게 3D Object인 Plane과 Cube, Sphere를 사용하였으며
Sphere에 Ex_07, Ex_04(전 예제 스크립트) 스크립트를 적용하였습니다.
Shpere 오른쪽에 있는 Cube는 기본 Cube이고
왼쪽에 있는 Cube는 기본 Cube의 Box Collider 속성 중 Is Trigger가 체크되어있습니다.

Collider란
하나의 컴포넌트로서 그것이 연결된 게임 오브젝트가 Rigidbody 컴포넌트가 있는
게임 오브젝트가 있다는 전제하에 다른 오브젝트에 반응할 수 있게 합니다.
Collider에는 다양한 형상과 유형이 있으며 씬 뷰에서 녹색 경계선으로 표시됩니다.
복잡한 형상에 대한 Collider가 필요하다면 두 가지 옵션을 사용할 수 있습니다.
첫째는 복잡한 오브젝트의 계층 구조에서 빈 오브젝트를 생성하여
각 부분 부분에 그 부분과 맞는 Collider를 적용하여 결합할 수 있습니다.
둘째는 Mesh Collider를 사용하여 그 오브젝트와 딱 맞게 Collider를 생성 시킬 수 있습니다.
그러나 Mesh Collider를 잘 사용하지 않는 이유는 그 오브젝트와 딱 맞게 만들어지기 때문에 세부 모델의 경우 너무 복잡하게 Collider가 적용되어 성능에 안 좋은 영향을 미칠 수 있기 때문입니다.
Collider는 여러 종류가 있으니 직접 만들어보고 느낌을 보면 더욱 좋을듯합니다.
예로 아래 그림을 보면 조금 더 납득이 가지 않을까 싶습니다.

좌: Capsule Collider, 우: Mesh Collider

이제 두 오브젝트가 충돌할 때에 발생하는 이벤트에 대해 알아보도록 하겠습니다.
오브젝트 간의 충돌이 발생하면 하나의 충돌체가 다른 오브젝트와 충돌하면서
OnCollisionEnter, OnCollisionStay, OnCollisionExit 의 이벤트를 호출하게 됩니다.
OnCollisionEnter - 두 오브젝트가 충돌하는 그 순간 한번 호출
OnCollisionStay - 두 오브젝트가 충돌하는 동안 계속 호출
OnCollisionExit - 두 오브젝트의 충돌이 끝났을 때 호출
마우스, 키보드의 입력을 받을 때와 느낌이 어느 정도 비슷하지 않나요?!..! 그리고!!
충돌 이벤트가 발생하려면 충돌하는 두 오브젝트 중 하나에는 꼭 Rigidbody 컴포넌트가 있어야 합니다.
여기서 Collider의 속성 중 Is Trigger를 체크하게 되면 오브젝트는 더 이상 충돌하지 않고 그냥 통과하게 되는데 이 또한 코드를 통해 감지할 수 있습니다. 이 이벤트는 충돌 이벤트와 비슷하게 적용됩니다.
OnTriggerEnter - Is Trigger가 체크되어있는 오브젝트에 충돌하는 그 순간 한번 호출
OnTriggerStay -  Is Trigger가 체크되어있는 오브젝트에 충돌하는 동안 계속 호출
OnTriggerExit - Is Trigger가 체크되어있는 오브젝트에 충돌이 끝났을 때 호출
이 또한 충돌 이벤트와 마찬가지로
이벤트가 발생하려면 충돌하는 두 오브젝트 중 하나에는 꼭 Rigidbody 컴포넌트가 있어야 합니다.
역시 글로만 보니 이해가 잘 되지 않을 수가 있습니다. 그러므로 실행 화면을 먼저 보도록 하겠습니다.

(Sphere의 왼쪽에 있는 Cube는 Is Trigger가 체크되어있는 상태입니다.)
Sphere가 Cube에 충돌할 때 Console 창을 보시면
Debug.Log로 각 상황에 맞는 이벤트가 발생한 것을 알 수 있습니다.
아래의 코드 내용과 비교하여 보면 이해가 수월하실 겁니다.

 

위 내용은

 

3D Physics - Unity Learn

Explore the most important topics related to the Unity 3D Physics engine, from Colliders to Raycasting.

learn.unity.com

https://unity3d.com/kr/learn/tutorials/topics/physics/colliders?playlist=17120

을 참하였습니다.

반응형