-
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 함수를 대신 써야 합니다.
참고한 사이트
OnTriggerEnter not working, tried everything! :( (C#)
Hi, I’ve only spent a week using Unity so far so very new! Trying to make an arcade-style falling game within a tunnel. I can’t get this to work, despite having used this before successfully. void OnTriggerEnter(Collider other) { print("YAY!"); if(othe
discussions.unity.com
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