카테고리 없음

2024 내일 배움캠프(Unity_6기) _ 사전캠프 8일차(08.22) : OnTrigger와 Oncollision, RigidBody에 대해 알아보자.

근본넘치는개발자 2024. 8. 22. 17:45

 

유니티에서는 충돌을 감지하기 위한 방법으로 두 가지가 있습니다.

 

 바로 Ontrigger와 Oncollision인데요

이 둘의 차이점과 각 기능에 대해 알아보고,

충돌을 감지하는 데 필요한 물리적인 특성을 가지게 해주는 RigidBody에 대해 알아보고자 합니다.

 


사용 방법은 다음과 같습니다. 

 

먼저 원하는 물체에 instpector 창에서 Collider를 추가해야 합니다.

 

 

보시면 그냥 Collider가 있고, Collider 2D가 있는 걸 확인 하실 수 있습니다. 

일반 Collider는 3D환경에서 사용하면 되겠죠?

 

 

 

물체의 형태에 맞는 Collider를 추가했다면 이제 Script를 통해 물체의 충돌을 제어할 수 있습니다.

 

 

먼저 OnTrigger에 대해서 설명하겠습니다.

 

OnTrigger를 살펴보기에 앞서서, OnTrigger를 사용하기 위해선

Collider에서 IsTrigger가 활성화 되어 있어야 합니다.  2D 그림 예시를 보면 체크가 되어 있죠?

 

 

OnTrigger라고 스크립트에 입력해 보면 그림과 같은 것들이 나옵니다.

마찬가지로 2D와 3D로 구분되어 있는 걸 확인해 볼 수 있습니다.

 

각 기능에 관해 설명하자면 다음과 같습니다.

 

OnTriggerEnter2D() :  다른 콜라이더와 처음 접촉할 때 트리거 콜라이더에서 이 함수 호출 (1회)

OnTriggerStay2D() :  콜라이더 내부에서 다른 콜라이더를 감지하면 프레임당 한 번씩 트리거 콜라이더에서 이 함수 호출 

OnTriggerExit2D() : 다른 콜라이더와의 접촉이 끊어지면 트리거 콜라이더에서 이 함수를 호출

 

3D의 경우도 마찬가지입니다.

 

+ 내용 추가 (8.27)

리지드바디가 있을 경우 그 게임오브젝트에
리지드바디가 없는 경우 충돌한 콜라이더 게임오브젝트에 이벤트 함수가 전달된다.

https://blog.naver.com/lyw94k/221273089832

OnCollision은 어떨까요.

 

OnTrigger와 유사해 보입니다.

 

각 기능에 대해 설명하자면

 

OnCollisionEnter2D() :  다른 콜라이더와 처음 접촉할 때 트리거 콜라이더에서 이 함수 호출 (1회)

OnTriggerStay2D() :  두 콜라이더가 접촉하고 있는 동안 물리 업데이트마다  한 번씩 트리거 콜라이더에서 이 함수 호출 

OnTriggerExit2D() : 두 충돌체의 접촉이 끊어지면 각 충돌체에서 이 함수를 호출

 

보시면 약간의 차이가 있음을 알 수 있었습니다.

 

내용을 읽어보면 OnCollision은 물리연산을 기반으로 동작하기에 물리연산을 감지할 수 있는 Rigidbody가 필요합니다.

RigidBody 2D는 콜라이더 없이는 서로 충돌할 수 없습니다.

 Rigidbody에 대한 설명입니다.

 

 

3D와 2D가 약간 다름을 알 수 있습니다.

 

먼저 2D부터 설명하도록 하겠습니다. 

 

BodyType을 보면 Dynamic, kinematic, static으로 구분되어 있음을 확인할 수 있습니다.

 

Dynamic : 모든 물리현상에 반응

Kinematic : 물리현상은 받지 않으나 스크립트를 통해 조작 가능

static : 물리현상을 받지 않고 조작 불가

 

반면 3D에선 어떨까요

 

isKinematic이라는 체크박스가 따로 있음을 알 수 있습니다.

기능은 2D의 Kinematic과 같습니다.

 

 

그 외 기능은 3d와 2d 모두 비슷합니다. 

질량, 저항, 중력 등등

 

 

더 자세한 내용을 알고 싶다면 아래의 공식 문서들을 참고해 보세요.

https://docs.unity3d.com/Manual/collider-interactions-ontrigger.html

 

Unity - Manual: OnTrigger events

Create and configure a trigger collider OnTrigger events Trigger collidersAn invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object’s mesh - a rough approximation is

docs.unity3d.com

 

https://docs.unity3d.com/Manual/collider-interactions-oncollision.html

 

Unity - Manual: OnCollision events

Use collisions to trigger other events OnCollision events Collision events occur when two non-trigger collidersAn invisible shape that is used to handle physical collisions for an object. A collider doesn’t need to be exactly the same shape as the object

docs.unity3d.com

 

https://docs.unity3d.com/kr/2023.2/Manual/class-Rigidbody.html

 

Rigidbody 컴포넌트 레퍼런스 - Unity 매뉴얼

Rigidbody 컴포넌트를 사용하여 게임 오브젝트에 리지드바디를 적용합니다.리지드바디는 게임 오브젝트의 움직임과 포지션을 제어하는 물리 기반 방법을 제공합니다.Transform 프로퍼티 대신 시뮬

docs.unity3d.com

https://docs.unity3d.com/kr/2023.2/ScriptReference/Rigidbody2D.html

 

Rigidbody2D - Unity 스크립팅 API

Rigidbody physics component for 2D sprites.

docs.unity3d.com

 

 

최종 정리

물체의 충돌을 감지하기 위해선 충돌하는 두 물체 모두 Collider를 가지고 있어야 한다.

 

OnTrigger 함수는 충돌하는 물체 둘 중 1개 이상에 Collider 컴포넌트에 IsTrigger가 활성화되어 있어야 하며, 

OnCollision 함수는 충돌하는 물체 둘 중 1개 이상에 Rigidbody IsKinematic이 비활성화 된) 혹은 Articulation body가 있고, IsTrigger가 비활성화되어 있어야 한다.

 

IsTrigger를 활성화하면 활성화된 물체는 물리 엔진이 무시된다.

 

따라서

물리적 충돌이 필요 없는 경우엔 OnTrigger 함수를,

물리적 충돌이 필요한 경우엔 OnCollision 함수를 사용하면 된다. 

 

 

이상 Ontrigger와 Oncollision에 대해 알아보았습니다.

Articulationbody에 대한 설명은 다음에 더 자세히 다뤄 보도록 하겠습니다.