김펭귄 관찰일기
article thumbnail

🐧. OnCollider와 OnTrigger

 유니티 컴포넌트 중에 Collider라는 녀석이 있는데, 우리는 이 녀석을 이용해 오브젝트들 간의 충돌 여부를 파악할 수 있다. OnColliderEnter, OnColliderStay, OnColliderExit, OnTriggerEnter, OnTriggerStay, OnTriggerExit 메서드라는 게 있는데 오늘은 이 녀석들에 대해 알아볼까 한다.

 


1. 사전적 의미


Collide
1. 충돌하다, 부딪치다
2. 충돌하다, 상충하다 (→collision)

Collider
-> 충돌자(?)

Rigidbody
1. (물리학) 강체(剛體)

Trigger
1. (총의) 방아쇠
2. (반응사건을 유발한) 계기[도화선] 
3. 촉발시키다 (=set off)
4. (장치를) 작동시키다 (=set off) 

 오호, 역시 단어 뜻을 알고 보면 대충 가닥이 잡힌다. (Rigidbody 빼고..) 강체는 또 뭐야.. 무튼 Rigidbody 경우에는 저기 '물리' 두 글자만 보면 되니까 이 정도면 파악하고 넘어가도록 하자.

 


 

2. 사전 준비

 OnTrigger 메서드와 OnCollider 메서드를 사용하기 위해선 사전에 해야 할 몇 가지가 있다.

 첫 번째로, 충돌시킬 두 오브젝트 중 최소 한 오브젝트에는 Rigidbody가 달려 있어야 한다.

 두 번째로, OnCollider를 사용하기 위해선 두 콜라이더의 OnTrigger는 체크 해제되어 있어야 하고, OnTrigger를 사용하기 위해서는 둘 중 최소 한 콜라이더에는 Is Trigger는 체크되어 있어야 한다.

 세 번째로, 2D 오브젝트는 Collider 2D, Rigidbody 2D를 달아줘야 하고, 3D 오브젝트는 Collider, Rigidbody를 달아줘야 한다.

 

 이건 Collider 부분에서 다뤄야 하는 내용인데, 알아두면 좋은 정보가 있다. Collider에 isTrigger을 체크하면 두 오브젝트가 충돌할 경우에 물리적 처리를 하지 않는다. 공과 지면이 충돌했다고 가정했을 때, 충돌한 직후 공은 튀어 오를 것이다. 이건 유니티에서 간단하게 테스트할 수 있는데, 만일 공의 Collider가 Is Trigger을 가지고 있다면 공은 지면과 충돌하지 않고 그대로 뚫고 내려간다. 이 점도 고려해서 만들면 좋을 것 같아서 남겨본다.

 

 


 

3. OnTrigger & OnCollider 메서드의 선언과 형식


OnTrigger와 OnCollider 선언 & 형식
[접근 제한자] [리턴값] [메서드] (매개 변수)

Ex)
private void OnCollider (Collider other)

public void OnTrigger2D (Colldier2D other)

 메서드 선언과 형식은 뭐 다른 메서드들과 별반 다르지 않는데, 하나 꼭 짚고 넘어가자. 앞서 말했었지만 2D는 Collider 2D와 Rigidbody 2D를, 3D는 Collider와 Rigidbody를 사용해야 한다는 걸 꼭 명심하자. (위에 적어둔 Example를 보면, 매개변수 자체가 다른 걸 볼 수 있다.)

 


 

4. OnTrigger 메서드


🐧 OnTriggerEnter (Collider other) / OnTriggerEnter2D (Collider2D other)
콜라이더와 콜라이더가 처음 충돌할 때, 호출된다.

🐧 OnTriggerStay (Collider other) / OnTriggerExit2D (Collider2D other)
콜라이더와 콜라이더가 충돌하지 않을 때, 호출된다.

🐧 OnTriggerExit (Collider other) / OnTriggerStay2D (Collider2D other)
OnTriggerEnter 직후부터 Exit 하기 전까지 계속해서 호출된다.

 


 

5. OnCollider 메서드 


🐧 OnColliderEnter (Collider other) / OnColliderEnter2D (Collider2D other)
콜라이더와 콜라이더가 처음 충돌할 때, 호출된다.

🐧 OnColliderStay (Collider other) / OnColliderStay2D (Collider2D other)
콜라이더와 콜라이더가 더 이상 충돌하지 않을 때, 호출된다.

🐧 OnColliderExit (Collider other) / OnColliderExit2D (Collider2D other)
OnColliderEnter 직후부터 Exit 하기 전까지 계속해서 호출된다.

 

profile

김펭귄 관찰일기

@Penguin.Kim