🐧. 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 하기 전까지 계속해서 호출된다.
'프로그래밍 > Unity' 카테고리의 다른 글
[Unity] Sprite Mask를 활용해서 스프라이트 형태 바꾸기 (0) | 2023.09.26 |
---|---|
[Unity] TextMeshPro에서 한글이 'ㅁ'으로 출력되는 문제 해결 방법 (0) | 2023.09.19 |
[Unity] Transition Duration이 0일 때, 애니메이션이 재생 되지 않는 문제 (0) | 2023.09.06 |
[Unity] 3D에서 2D로, 2D에서 3D로 전환하기 (0) | 2023.09.06 |