주녘공부일지

[Unity3D] Collision (충돌) 본문

GameEngine/UnityEngine - Class

[Unity3D] Collision (충돌)

주녘 2022. 2. 23. 18:55
728x90

 


1. Collider

충돌체의 기본 클래스로 충돌체의 범위, 재질 등을 나타냄

- 충돌체의 모양에 따라 BoxColliderSphereColliderCapsuleColliderMeshCollider, 등이 있음

 

 

Is Trigger : rigidbody에 충돌을 연산하지 않고 충돌 감지 시에 OnTriggerXX함수 호출

 


2. RIgidbody

충돌을 감지하기 위해 사용하는 컴포넌트

- 오브젝트를 물리 엔진이 제어하게 만들 수 있음 ( + 중력 )

 

 

is Kinematic : 물리 연산 여부 ( 체크 시 충돌에 관한 물리 연산을 하지 않음 )

 + 물리연산을 하지 않으므로, 중력도 적용되지 않음

Interpolate : 고정 프레임율에서 동작하는 물리효과를 보간할때 사용

Collision Detection : 충돌 감지 모드 설정

Constraints : 오브젝트의 물리연산 시에 각 축에 대한 위치, 회전을 고정시킬지 여부

 


3. 충돌 이벤트 ( Collision, Trigger )

1) Collision ( 물리 연산o )

- 충돌하는 자신 혹은 상대에게 Rigidbody 컴포넌트가 존재해야 함 ( isKinematic 비활성화 )

- 충돌하는 두 오브젝트에 Collider 컴포넌트가 존재해야 함 ( isTrigger 비활성화 )

 

OnCollisionEnter : 다른 Collider가 영역으로 들어왔을 때 호출

OnCollisionStay : 다른 Collider가 영역내에 있을 때 반복 호출

OnCollisionExit : 다른 Collider가 영역 내에 존재하다가 벗어나면 호출

( 매개변수는 스크립트를 가진 콜라이더와 충돌한 콜라이더가 전달됨 )

 

2) Trigger ( 물리 연산x )

1) 충돌하는 자신 혹은 상대에게 Rigidbody가 존재해야 함 ( 둘중 하나는 isTrigger 활성화 )

2) 충돌하는 두 오브젝트에 Collider 컴포넌트가 존재해야 함

 

OnTriggerEnter, OnTriggerExit, OnTriggerStay : OnCollisionXX 함수와 같은 조건으로 호출

 

+ OnTriggerXX함수와 OnCollisionXX함수는 같이 호출되는 경우가 없음

 ( isTrigger 옵션이 활성화 되면, 물리 연산을 하지 않아 OnCollisionXX 함수가 호출되지 않음 )

 

+ Rigidbody의 Constraints로 물리 연산 시에 Position, Rotation을 고정시켜 사용하는 것도 가능

+ 2D는 OnCollisionXX2D, OnTriggerXX2D 으로 사용 ( ex. OnTriggerEnter2D )


Collision, Trigger action matrix

행(row) : 자기 자신 (Object), 열(column) : 충돌하는 오브젝트

 

여러가지 경우의 수가 존재하고, 버전에 따라 조금씩 다르게 동작하는 경우도 있을 수 있기 때문에 사용할 때 잘 확인하는 것이 좋음

728x90

'GameEngine > UnityEngine - Class' 카테고리의 다른 글

[Unity3D] Camera  (0) 2022.03.01
[Unity3D] Physics.Raycast (+LayerMask)  (0) 2022.02.24
[Unity3D] Rotation (회전)  (0) 2022.02.21
[Unity3D] Vector3  (0) 2022.02.21
[Unity3D] position (위치) // 플레이어 이동 예제  (0) 2022.02.21