본문 바로가기
🌐 유니티 (Unity)

Day 67 - Trigger와 Collision2D 활용 및 아이템 획득 & 피해 처리 구현

by shin0707 2025. 1. 16.
728x90
반응형

 

  • 주제

>>  Trigger와 Collision2D의 비교

>>  Trigger와 Collision2D의 사용 예제

>>  활용 팁과 최적화


  • 공부내용

Unity에서 충돌 처리를 구현할 때, TriggerCollision2D는 매우 자주 사용되는 두 가지 방식이다. 이번 글에서는 각각의 특징과 쓰임새를 비교하고, 아이템 획득 처리와 플레이어 피해 처리를 구현하는 예제를 함께 소개한다.

 

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: Rigidbody2DKinematic으로 설정.
  • Collision2D: Rigidbody2DDynamic으로 설정.

 

- 태그 활용

  • 충돌 대상마다 Tag를 설정하여 불필요한 충돌 체크를 최소화한다.

 

- 물리 엔진 최적화

  • 물리적 효과가 필요 없는 경우 Trigger를 우선적으로 사용하여 성능을 향상시킨다.

<결론>

Trigger와 Collision2D는 Unity에서 충돌 처리를 구현할 때 각각의 목적에 맞게 사용된다.

Trigger는 간단한 이벤트 처리에 적합하며, Collision2D는 물리적 상호작용이 필요한 경우 유용하다.

이번 예제 스크립트를 참고하여 게임의 다양한 상황에 맞는 충돌 처리를 구현해보자!

 

728x90

 

728x90
반응형

loading