유니티(Collision)
Collider
- Collider를 붙였다고 해서 관통이 안된다거나 하는 처리를 할 수는 없다.
- 위와 같은 처리는 Collider를 참고하여 처리해주는 Rigidbody나 NavMeshAgent같은 물리적인 처리를 해주는 컴포넌트가 필요함.
- 위와 같이 Box모양인 Sphere혹은 Capsule 모양의 Collider를 Mesh를 감싸도록 붙여서 충돌 처리 진행. 즉, Collider영역 안에 오브젝트가 닿거나 들어오면 충돌 인식
Collision
- 나랑 물리적으로 부딪힌 오브젝트에 대한 정보 저장
- OnCollisionEnter 이벤트 함수가 발생하면 매개 변수인 Collision 타입의 collision에 나랑 부딪힌 오브젝트의 Transform, Collider, GameObject, Ridgidbody, 상대 속도 등 정보 가 담김
OnCollisionEnter
private void OnCollisionEnter(Collision collision) { Debug.Log(collision.gameObject.name); }
- OnCollisionEnter 이벤트가 발생하기 위한 조건은 아래와 같다.
- 자신 혹은 상대방 둘 중 하나는 꼭 Rigidbody 보유
- IsKinematic은 off - 나 그리고 상대방 둘 다 모두 Collider컴포넌트 보유
- IsTrigger는 off
Trigger
- 물리적으로 부딪히지 않더라도 내 Colider범위 안에 들어오면 발생(정보 담김)
- 물리적인 피격, 충돌이 발생하지 않더라도 Collider범위 안에만 있으면 판단 가능
- 성능으로 인해 복잡한 물리 구현이 중요하지 않다면 Trigger로 처리하는게 성능 향상의 방법
OnTriggerEnter
private void OnTriggerEnter(Collider other)
{
Debug.Log(other.gameObject.name);
}
- OnTriggerEnter발생조건
- 나 혹은 상대방 둘 중 하나는 Rigidbody보유
- IsKinematic 여부는 상관 없음 - 모두 Collider qhdb
- 둘 중 하나는 IsTrigger On
Leave a comment