- 주제
>> Trigger와 Collision2D의 비교
>> Trigger와 Collision2D의 사용 예제
>> 활용 팁과 최적화
- 공부내용
Unity에서 충돌 처리를 구현할 때, Trigger와 Collision2D는 매우 자주 사용되는 두 가지 방식이다. 이번 글에서는 각각의 특징과 쓰임새를 비교하고, 아이템 획득 처리와 플레이어 피해 처리를 구현하는 예제를 함께 소개한다.
1. Trigger와 Collision2D의 비교
아래는 Trigger와 Collision2D의 특징, 장점, 단점, 사용 예를 비교한 표이다:
구분TriggerCollision2D
구분 | Trigger | Collision2D |
특징 | Is Trigger가 활성화된 Collider 사용 | Is Trigger가 비활성화된 Collider 사용 |
사용 상황 | 물리적 반응 없이 충돌 이벤트만 처리할 때 사용 | 물리적 충돌 및 반응(Force, Velocity)이 필요할 때 사용 |
장점 | - 계산이 가볍고 간단한 이벤트 처리가 가능 | - 실제 물리적 상호작용을 쉽게 구현 가능 |
- 물리 엔진의 영향을 받지 않음 | - 충돌 이벤트를 정밀하게 처리 가능 | |
단점 | - 물리적 효과(반발, 마찰 등)를 구현할 수 없음 | - 계산이 상대적으로 무거움 |
- Rigidbody가 필요함 | - 적절한 Rigidbody 설정이 필요 | |
게임 예시 | - 아이템 획득 | - 플레이어와 벽 또는 적의 충돌 처리 |
- 적 영역 감지 | - 플랫폼 게임에서의 점프 및 착지 처리 |
2. Trigger와 Collision2D의 사용 예제
(1) Trigger를 활용한 아이템 획득 처리
아래는 Trigger를 활용하여 플레이어가 아이템과 접촉했을 때 점수를 증가시키고 아이템을 제거하는 스크립트이다.
ItemPickup.cs
using UnityEngine;
public class ItemPickup : MonoBehaviour
{
public int scoreValue = 10; // 아이템 획득 시 증가할 점수
public AudioClip pickupSound; // 아이템 획득 효과음
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
// 점수 추가
PlayerStats.Instance.AddScore(scoreValue);
// 효과음 재생
if (pickupSound != null)
AudioSource.PlayClipAtPoint(pickupSound, transform.position);
// 아이템 제거
Destroy(gameObject);
}
}
}
PlayerStats.cs
using UnityEngine;
public class PlayerStats : MonoBehaviour
{
public static PlayerStats Instance; // 싱글톤 인스턴스
public int score = 0; // 현재 점수
private void Awake()
{
if (Instance == null)
Instance = this;
else
Destroy(gameObject);
}
public void AddScore(int value)
{
score += value;
Debug.Log("Current Score: " + score);
}
}
(2) Collision2D를 활용한 플레이어 피해 처리
아래는 Collision2D를 활용하여 플레이어가 적과 충돌했을 때 체력을 감소시키고, 체력이 0이 되면 게임 오버 처리를 하는 스크립트이다.
PlayerHealth.cs
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
public int maxHealth = 100; // 최대 체력
private int currentHealth;
private void Start()
{
currentHealth = maxHealth;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Enemy"))
{
// 적으로부터 피해
TakeDamage(20);
}
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
Debug.Log("Current Health: " + currentHealth);
if (currentHealth <= 0)
{
Die();
}
}
private void Die()
{
Debug.Log("Player Died!");
// 게임 오버 처리
// 예: SceneManager.LoadScene("GameOver");
Destroy(gameObject);
}
}
3. 활용 팁과 최적화
- Rigidbody 설정
- Trigger: Rigidbody2D는 Kinematic으로 설정.
- Collision2D: Rigidbody2D는 Dynamic으로 설정.
- 태그 활용
- 충돌 대상마다 Tag를 설정하여 불필요한 충돌 체크를 최소화한다.
- 물리 엔진 최적화
- 물리적 효과가 필요 없는 경우 Trigger를 우선적으로 사용하여 성능을 향상시킨다.
<결론>
Trigger와 Collision2D는 Unity에서 충돌 처리를 구현할 때 각각의 목적에 맞게 사용된다.
Trigger는 간단한 이벤트 처리에 적합하며, Collision2D는 물리적 상호작용이 필요한 경우 유용하다.
이번 예제 스크립트를 참고하여 게임의 다양한 상황에 맞는 충돌 처리를 구현해보자!
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 68 - 유니티에서 시간을 멈춰도 코루틴이 작동하게 하는 방법 🎮 (66) | 2025.01.22 |
---|---|
Day 66 - Unity Blend Tree를 활용한 애니메이션 전환 🎧 (43) | 2025.01.12 |
Day 65 - Unity Animator 효율적으로 관리 - Enum 활용 🎥 (26) | 2025.01.08 |
Day 64 - Unity 텍스트 색상 변경 및 기본 기능 확장 방법 🎨 (34) | 2025.01.04 |
Day 63 - Firebase 쿠폰 관리 (53) | 2024.12.31 |