Unity 충돌 감지 및 트리거
2024. 11. 28. 14:41ㆍUnity
Unity에서의 충돌 감지 및 트리거
Unity에서 게임 오브젝트 간의 충돌 감지와 트리거(Trigger)는 물리적 상호작용을 구현하는 데 핵심적인 역할을 합니다.
적의 공격 감지, 아이템 획득, 영역 진입 이벤트 처리 등 게임의 다양한 기능을 구현할 수 있습니다.
이번 포스팅에서는 충돌과 트리거의 개념, 설정 방법, 그리고 사용 예제를 다룹니다.
1. 충돌 감지와 트리거란?
1) 충돌(Collision)
- 두 게임 오브젝트가 서로 물리적으로 부딪힐 때 발생합니다.
- Rigidbody와 Collider를 통해 물리적인 충돌과 반응을 처리할 수 있습니다.
- 예: 벽에 공이 부딪혀 튕겨 나가는 상황.
2) 트리거(Trigger)
- 물리적으로 부딪히지 않고도 오브젝트 간의 상호작용을 감지합니다.
- Trigger는 물리 연산을 배제하고, 이벤트만 감지합니다.
- 예: 캐릭터가 특정 영역에 들어갔을 때 아이템 획득 처리.
2. 충돌과 트리거 설정하기
1) Collider 추가하기
- 충돌을 감지하려면 오브젝트에 Collider를 추가해야 합니다.
- Collider 종류:
- Box Collider: 박스 모양의 충돌 영역.
- Sphere Collider: 구체 모양의 충돌 영역.
- Capsule Collider: 캡슐 모양의 충돌 영역.
- Mesh Collider: 복잡한 형태의 충돌 영역.
2) Trigger 활성화
- Collider 컴포넌트에서 Is Trigger 옵션을 활성화합니다.
- Trigger는 물리 연산 없이 이벤트 감지만 처리합니다.
3) Rigidbody 필요성
- 한쪽 오브젝트에 Rigidbody가 있어야 충돌이 감지됩니다.
- Trigger의 경우 Rigidbody 없이도 이벤트 감지가 가능합니다.
3. 충돌 감지 메서드
1) OnCollisionEnter
- 충돌이 발생했을 때 호출됩니다.
void OnCollisionEnter(Collision collision)
{
Debug.Log("충돌한 오브젝트: " + collision.gameObject.name);
}
2) OnCollisionStay
- 충돌 상태가 유지되는 동안 매 프레임 호출됩니다.
void OnCollisionStay(Collision collision)
{
Debug.Log("충돌 상태 유지 중: " + collision.gameObject.name);
}
3) OnCollisionExit
- 충돌이 끝났을 때 호출됩니다.
void OnCollisionExit(Collision collision)
{
Debug.Log("충돌 종료: " + collision.gameObject.name);
}
4. 트리거 감지 메서드
1) OnTriggerEnter
- Trigger 영역에 진입했을 때 호출됩니다.
void OnTriggerEnter(Collider other)
{
Debug.Log("트리거 진입: " + other.gameObject.name);
}
2) OnTriggerStay
- Trigger 영역 내에 있는 동안 매 프레임 호출됩니다.
void OnTriggerStay(Collider other)
{
Debug.Log("트리거 내에 머무는 중: " + other.gameObject.name);
}
3) OnTriggerExit
- Trigger 영역에서 나갈 때 호출됩니다.
void OnTriggerExit(Collider other)
{
Debug.Log("트리거 종료: " + other.gameObject.name);
}
5. 예제: 아이템 획득 구현
1) 트리거 설정
- 아이템 오브젝트에 Box Collider를 추가합니다.
- Is Trigger 옵션을 활성화합니다.
2) 스크립트 작성
using UnityEngine;
public class ItemCollector : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("아이템 획득!");
Destroy(gameObject); // 아이템 제거
}
}
}
3) Player 태그 설정
- 플레이어 오브젝트에 Tag를 "Player"로 설정합니다.
6. 주의사항
- Rigidbody 사용 필수
- 충돌 감지를 위해서는 Rigidbody가 필요합니다.
- Trigger는 Rigidbody 없이도 작동하지만, 성능 최적화를 위해 적어도 한쪽에 Rigidbody를 추가하는 것이 좋습니다.
- 정확한 Collider 크기 설정
- Collider 크기가 너무 크거나 작으면 예상치 못한 충돌이 발생할 수 있습니다.
- Scene 뷰에서 Collider 영역을 시각적으로 확인하세요.
- Is Trigger와 물리 연산
- Is Trigger가 활성화되면 물리적 반응(예: 튕김, 밀림 등)은 작동하지 않습니다.
7. 충돌과 트리거 활용 예제
적 공격 충돌 처리
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
Debug.Log("적과 충돌! 체력 감소!");
}
}
특정 지역 진입 이벤트
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
Debug.Log("플레이어가 영역에 진입했습니다!");
}
}
8. 요약
Unity에서 충돌 감지와 트리거는 게임의 상호작용을 구현하는 핵심 메커니즘입니다.
- 충돌(Collision): 물리적 상호작용을 포함한 충돌 처리.
- 트리거(Trigger): 비물리적 이벤트 감지.
'Unity' 카테고리의 다른 글
Unity 2D 캐릭터 컨트롤러 구현 (0) | 2024.12.09 |
---|---|
Unity 2D 스프라이트 및 애니메이션 (0) | 2024.11.29 |
Unity Rigidbody를 활용한 기본 물리 적용 (0) | 2024.11.28 |
Unity Update(), Start(), FixedUpdate()의 차이점 (0) | 2024.11.26 |
Unity에서의 스크립트 사용법 (0) | 2024.11.26 |