Unity의 Collision은 두 Collider가 충돌했을 때 발생하는 이벤트입니다. Collision 이벤트는 다음과 같은 정보를 제공합니다.
- 충돌한 GameObject의 Collider
- 충돌 지점
- 충격량
- 상대적인 선 속도
- Rigidbody
- Transform
Collider
Collider는 물리 엔진에 의해 충돌을 처리하는 데 사용되는 컴포넌트입니다. Collider에는 다음과 같은 종류가 있습니다.
- BoxCollider: 상자 모양의 Collider
- SphereCollider: 구 모양의 Collider
- CapsuleCollider: 원통 모양의 Collider
- MeshCollider: 메시를 사용하여 정의하는 Collider
Contacts
Contacts는 물리 엔진에 의해 생성되는 물체 간의 충돌 지점입니다.
접점은 여러 개가 될 수 있고, ContactPoint[]을 반환합니다.
ContactPoint는 충돌 지점에 대한 정보를 제공하는 구조체입니다.
- normal: 충돌 지점의 법선
- otherCollider: 충돌 지점의 다른 Collider
- point: 충돌 지점의 위치
- separation: 충돌한 두 Collider 간의 거리
- thisCollider: 충돌 지점의 첫 번째 Collider
gameObject
gameObject는 충돌한 게임 오브젝트입니다.
impulse
impulse는 충돌 시 발생한 충격량입니다. 충격량은 충돌한 두 객체의 운동량을 변화시킵니다.
relativeVelocity
relativeVelocity는 충돌한 두 객체의 상대적인 선 속도입니다. 상대적인 선 속도는 충돌한 두 객체가 충돌하기 전에 서로에 대해 가졌던 속도입니다.
rigidbody
rigidbody는 충돌한 GameObject의 Rigidbody 컴포넌트입니다. Rigidbody 컴포넌트는 물리 엔진에 의해 제어되는 객체의 물리적 특성을 나타냅니다.
transform
transform은 충돌한 GameObject의 Transform 컴포넌트입니다. Transform 컴포넌트는 객체의 위치, 회전, 스케일을 나타냅니다.
활용 방법
Collision 이벤트를 활용하여 다음과 같은 작업을 수행할 수 있습니다.
- 충돌을 감지하고 처리하기
- 충돌 시 발생한 효과를 구현하기
- 충돌 시 발생한 데이터를 분석하기
예시
예를 들어, 다음 코드는 충돌을 감지하고 충돌 지점의 위치를 출력합니다.
void OnCollisionEnter(Collision collision)
{
// 충돌 지점의 위치를 출력합니다.
Debug.Log(collision.contacts[0].point);
}
다음 코드는 충돌 시 발생한 충격량을 사용하여 객체의 속도를 변화시킵니다.
void OnCollisionEnter(Collision collision)
{
// 충격량을 사용하여 객체의 속도를 변화시킵니다.
gameObject.rigidbody.AddForce(collision.impulse * collision.normal);
}
이러한 방법을 사용하여 충돌을 보다 효과적으로 처리하고 게임을 보다 재미있게 만들 수 있습니다.
'Unity' 카테고리의 다른 글
화면 위치에 해당하는 Ray 생성 : Camera.main.ScreenPointToRay (0) | 2023.12.07 |
---|---|
Unity의 Character Controller : 간단하게 움직임 구현 (0) | 2023.12.05 |
Unity의 PointEventData 클래스 (0) | 2023.11.27 |
간단하게 오브젝트 간의 각도 구하는 방법 (0) | 2023.11.24 |
Vector3 : Lerp, SmoothDamp, MoveTowards 비교 (0) | 2023.11.23 |