Game Development, 게임개발/개발

게임 오브젝트의 2가지 충돌, OnTriggerXXX, OnCollisionXXX [Unity]

게임이 더 좋아 2022. 2. 20. 23:55
반응형
728x170

 

유니티에서는 게임 오브젝트의 충돌의 종류에는 일반적으로 2가지가 있다.

충돌 종류에 따라 실행되는 콜백함수가 다르다.

 

일반적으로 최초의 충돌이 일어났을 때는

OnTriggerEnter, OnCollisionEnter 둘 중 하나의 함수가 실행될 것이다.

(충돌 이벤트 메서드(함수))

 

** 이 함수가 메시지를 받았기 때문에 실행되는 것인데..?

 

한 번 알아보자

 


 

일반적으로 Start()나 Update() 메서드가 자동으로 실행되는 이유는

Start, Update 메시지를 받아서 해당 함수를 실행하기 때문이다.

 

즉, 충돌 메시지에 대응하려면 충돌 메시지와 같은 이름으로 메서드를 작성하면 된다는 말이다.

 

하지만 일반적으로 충돌 메시지에는 메서드 이름뿐만 아니라 충돌한 오브젝트에 대한 정보도 같이 들어간다.

 

A와 B가 충돌했다면 A가 받는 메시지에는

 

1. 충돌 종류에 따른 메서드 이름

2. 오브젝트 B에 대한 정보

 

메시지에 (2) 라는 정보가 포함되기 때문에

충돌한 오브젝트가 무엇인지에 따라 반응해야하는 방식이 다를 수 있다는 말이다.

 

결국 Collider가 충돌을 감지하기 때문에 유니티에서는 충돌 판정에 대해 신경쓰지 않아도 좋으나

실제로 충돌 판정에 대한 개념은 중요하다 ★★★★★★★

 

실제로 충돌 메시지를 발생시키는 것은 RigidBody(강체) 컴포넌트다.

즉, 충돌 이벤트 메서드를 사용하려면 서로 충돌 중인 게임 오브젝트들 중에서

최소 하나의 게임 오브젝트는 Rigidbody 컴포넌트를 가지고 있다는 말이 된다.

 


 

충돌 이벤트 함수에는 2가지 종류가 있다.

 

일반적인 Collider 간의 충돌일 때의 함수와

최소한 하나의 Collider가 Trigger 콜라이더일 때 함수

 

2가지 종류가 존재한다.

 

 

Collider에서 Messages를 받아서 실행하는 것들이다.

 

근데 왜 2가지 종류를 가지냐..? 굳이..?

쓰임이 조금 달라서 그렇다.

 

일반적으로 OnTrigger 계열의 메서드 실행할 때는 충돌한 상대방 게임의 오브젝트 콜라이더 컴포넌트가 Collider 타입으로 들어온다.

그에 반해서 OnCollision 계열은 Collision 타입으로 들어온다.

 

다시 요약하자면 

OnTrigger 계열의 메서드가 실행될 때는 Trigger 충돌에 상세한 충돌 정보가 필요 없어서 그렇다.

-> 즉, 일반적으로 Trigger 충돌은 일반적인 충돌과는 달리 서로를 밀어내지 않고 통과한다.

**OnTrigger를 쓸 때는 물리적 충돌이 아니라고 생각하면 쉽다. ★★★★★★★

 

그래서 실제로 물리적인 반발력, 정확한 충돌 지점, 충격량 등에 대해 값이 존재하지 않으므로

바로 그냥 트리거 충돌한 상대방 게임 오브젝트의 Collider만 받아오는 것이다.

 

또한

 

OnTrigger 계얼 메서드는 자신의 Collider가 IsTrigger가 아니어도 실행된다.

 

다시 말해서 A 와 B의 트리거 충돌이 일어나려면 A or B 가 트리거 콜라이더를 가지면 된다.

그리고 트리거 충돌이 발생하면 A 와 B 둘다 OnTrigger 계열 메서드가 실행된다.

 


 

참고링크

https://docs.unity3d.com/kr/530/ScriptReference/Collider.html

반응형
그리드형