OnTrigger , OnCollision 비교하기
Collider
유니티에서 충돌체크를 하기 위한
필요한 컴포넌트이다.
3D오브젝트를 생성하면 Collider가 자동적으로
추가 되어있다.
먼저 Trigger에 대해 살펴보자
1) void OnTriggerEnter(Collider other) : Trigger에 들어갔을 때
2) void OnTriggerStay(Collider other) : Trigger안에 있을때
3) void OnTriggerExit(Collider other) : Trigger를 벗어 날때
1) OnTriggerEnter
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag ("Pick Up"))
{
other.gameObject.SetActive (false);
count = count + 1;
SetCountText ();
Debug.Log(count);
}
코드는 Roll a Ball 플레이 스크립트
Collider가 닿게 되면 아래 코드가 실행된다.
흰색 볼에 스크립트를 추가 하였다. 그리고 노란색 Cube에 닿을때 마다
왼쪽 상단에 Count 값이 증가되고 있는것을 볼수 있다.
2) OnTriggerStay
우선 // other.gameObject.SetActive (false);
위 코드면 큐브가 사라진다.
Collider가 닿은 상태를 유지 하는 동안을 보기위해
주석 처리하고 실행했다.
Count가 닿는 동안 계속 증가하는것을 볼 수 있다.
그렇다면 Exit도 충분히 예상 가능하다.
3) OnTriggerExit
노란색 큐브를 닿는 순간에는 아무일이 일어나지 않지만
큐브를 지나쳐가는(벗어나는) 순간 Count가 올라간다.
OnTrigger를 알아봤는데 꼭 설정해 줘야하는것들이 있다.
노란색큐브와 흰색공에는 반드시 충동체크를 할수 있는 Collider가 있어야한다.
그리고 두 오브젝트중 하나는 Collider에 is Trigget에 체크가 되어있어야한다.
위 게임같은 경우에는 큐브에 체크가 되어있다. 흰색공에 체크 되어있지 않는
이유는 is Trigger 가 체크가 되면 흰공에는 Rigidbody에 무게 값을 갖고있기 때문에
땅을 통과해 밑으로 사라져버린다.
(하지만 여기서는 Cube에도 Rigidbody에 UseGravity에 체크되어있는데 땅으로 떨어지지 않고있다. Is Kinematic를 체크 하고있기 때문)
OnCollsion
void OnCollisionEnter(Collision other) : Collision에 들어 갔을 때
void OnCollisionStay(Collision other) : Collision과 충돌하고 있는 중
void OnCollisionExit(Collision other) : Collision과 충동에서 벗어 났을 때
Trigger와 함수의 기능은 똑같다
OnTrigger : 물리 연산 안함, 관통 가능, Collision 보다 연산이 적어서 효율적
OnCollision : 물리 연산을 통해 충돌 처리, 관통 X, 많이 사용하면 부하?.
여기서 주의할 점은 충돌 할 오브젝트들이 Rigidbody를 갖고 있다면오브젝트 모두 isTrigger가 언체크 되어있어야 하고 또,둘중 한 오브젝트는 Is Kinematic가 언체크 되어 있어야 한다.
'유니티 > 레퍼런스' 카테고리의 다른 글
유니티) 레이케스트 Physics.Raycas, 콜라이더 검출하기 (0) | 2018.12.17 |
---|---|
유니티) 오브젝트 찾기(Tag,이름,자식 오브젝트 찾기,꺼져있는 오브젝트) (3) | 2018.12.14 |
유니티) Roll a Ball 튜토리얼 연습하기 #1 (0) | 2018.12.07 |
유니티) Quaternion / Quaternion.Euler (0) | 2018.12.06 |
유니티) 열거형 Enum사용법 (0) | 2018.12.06 |