-
Unity C# 2가지 충돌 감지 OnCollisionEnter, OnTriggerEnter프로그래밍/Unity 2023. 6. 14. 21:20728x90
Unity에서 충돌을 감지하는 방법은 2가지가 있읍니다. 사실 Raycast라고 하나 더 있는데 Unity에서 만들어 준 OnCollision, OnTrigger 내장함수를 먼저 알아보겠읍니다.
1. OnCollisionEnter / OnCollisionStay / OnCollisionExit
Rigidbody + Box Collider에서 Trigger 처리를 하지 않은 오브젝트는 유니티의 물리 엔진의 영향을 받게 되는데
이 오브젝트에 적용할 Script에서 OnCollision ~~ 함수를 쓰면 충돌 감지를 합니다.
충돌감지를 하면 Update안에서 계속 인식이 되야하니까 Update 문 안에 써야하나 싶지만
Update안에 쓸 필요 없이 Update 바깥에 써주면 됨니당.
2D에서는 뒤에 2D를 붙여주면 됩니당.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Controller : MonoBehaviour { private void OnCollisionEnter2D(Collider2D col) { if(col.gameObject.tag == "Player") Destroy(col.gameObject); Debug.Log("충돌이 시작될 때 출력"); } private void OnCollisionStay2D(Collider2D col) { if(col.gameObject.tag == "Player") Destroy(col.gameObject); Debug.Log("충돌이 되는 동안 출력"); } private void OnCollisionExit2D(Collider2D col) { if(col.gameObject.tag == "Player") Destroy(col.gameObject); Debug.Log("충돌이 끝날 때 출력"); } void Update(){ } }
2. OnTriggerEnter / OnTriggerStay / OnTriggerExit
Box Collider에서 Trigger 처리를 하게 되면 유니티의 물리 엔진의 영향을 받지 않습니다.
복잡한 오브젝트들 속에서 물리 엔진의 영향을 받지 않고 특정 공간에 머무르면서 충돌 감지가 필요할 때 유용했습니다.
사용 방법은 OnCollision 함수들과 동일하고 2D에서는 뒤에 2D를 붙여주면 됩니다.
이때 주의할 점은 두 물체가 충돌할 때
적어도 하나는 Box Collider에서 Is Trigger 처리가 되어야 하고,
RigidBody를 가지고 있어야 합니다.
둘다 Trigger 체크가 되어 있지 않다면 OnCollision 함수를 대신 써야 합니다.
참고한 사이트
728x90'프로그래밍 > Unity' 카테고리의 다른 글
Unity C# float 반올림, 올림, 버림 하기 (0) 2023.07.01 Unity C# String to Int, Int to String (0) 2023.06.04 Unity C# the associated script can not be loaded 오류 해결 (0) 2023.02.10 Unity C# Random Range 사용법 (int/float) (0) 2023.02.05 [Unity][2D] 유니티 스프라이트 애니메이션 넣기 (0) 2021.12.12