게임 오브젝트의 충돌이벤트와 트리거이벤트, 키네마틱에 대해 정리하였습니다. (Collision, Trigger, Kinematic)
1. 충돌 (Collsion)
충돌 이벤트 종류
OnCollisionEnter : 2개의 오브젝트의 충돌시점에 1번 발생하는 이벤트
OnCollisionStay : 닿아있는 동안 계속 발생
OnCollisionExit : 떨어질 때 1번 발생
매개변수인 Collision collision에는 상대 오브젝트의 정보가 들어있다.
조건
1. 2개 오브젝트 모두 Collider가 있어야 한다(영역계산범위)
2. 움직이는 오브젝트에 Rigidbody가 있어야 한다.(Rigidbody는 움직일 때 계산)
-> Box가 움직여서 Wall에 닿으면 이벤트 발생
-> Wall이 움직여서 Box에 닿으면 이벤트 발생하지 않음 (간혹 발생함)
Box : Collider,Rigidbody
Wall : Collider
2. 트리거 (Trigger)
(초~중학교때 스타크래프트 유즈맵에 관심이 있었는데 비슷한 것 같아서 흥미로웠다)
어느영역에 닿으면 발생하는 이벤트로 물리력을 동반하지 않는다는 것이 특징이다.
트리거이벤트에서 가장 많이 사용하는 것은 OnTriggerEnter이다.
트리거 이벤트 종류
OnTriggerEnter : 물리력을 동반하지 않은 닿는 순간 1번 발생
OnTriggerStay : 물리력을 동반하지 않은 닿아있는 동안 계속 발생
OnTriggerExit : 물리력을 동반하지 않은 떨어지는 순간 1번 발생
조건
1) 2개 오브젝트 모두 Collider가 있어야한다.
2) 둘중 하나에 Rigidbody가 있어야 한다.
3) 둘중 하나에 IsTrigger가 true여야 한다.
4) 어느쪽이 움직이더라도 OnTriggerEnter가 발생한다.
Box에 Rigidbody와 Collider의 IsTrigger를 true로 주면 바닥과 OnTriggerEnter이벤트는 발생하지만
물리력을 동반하지 않기 때문에 미는 힘이 생기지 않아서 중력에 의해 바닥으로 추락한다.
Box에 Rigidbody를주고 IsTrigger룰 false를 줘서 바닥과 물리력이 작용해 중력으로 떨어지지 않도록 할 수 있다.
대신에 Wall의 Collider와 IsTrigger를 true로 주고 Box를 움직여 Wall과 부딪히면 OnTriggerEnter이벤트 발생한다.
3. Kinematic
Kinematic - 물리적 힘에 해제되는 오브젝트
Rigidbody 컴포넌트에서 IsKinematic의 옵션을 체크하면 Kinematic이 켜지게된다
Kinematic이 켜지게 되면 물리력이 해제된다
키네마틱을 이용하여 벽에 닿았을 때 튕겨나오게 해보자.
IsKinematic 사용 - 벽에 닿았을 때 튕겨나오기
트리거이벤트로 벽(Wall)에 닿았을 때 Rigidbody의 isKinematic을 false로 (체크해제) 바꿔주게 되어 물리력이 작용한다
그리고 AddRelativForce로 벡터 각도를 뒤 45도로 힘을 주어 반대편으로 튕겨나가게 구현할 수 있다.
충돌이벤트로 바닥(Floor)에 닿았을 때 다시 isKinematic을 true로 주어 물리력을 해제한다.
'개발 > Unity' 카테고리의 다른 글
[Unity] 오디오 사운드 [Audio Sound] (0) | 2023.02.23 |
---|---|
[Unity] 캐릭터 컨트롤러 [CharacterController] (0) | 2023.02.22 |
[Unity] 오브젝트 이동, 회전, AddForce, 점프, LookAt 과 RotateAround [Transform] (1) | 2023.02.22 |
[Unity] 캐릭터 제작 및 총 발사 로직 [1 / 2] (1) | 2023.02.20 |
[Unity] Unity 시작과 기본 기능들 [2 / 2] (1) | 2023.02.20 |