2014. 10. 1.

유니티에서 Death Trigger 를 구현해보자

Death Trigger란 플레이어가 언제 죽는지 기점을 잡는 역할을 합니다. 2D 러닝 게임을 예로 들자면, 낭떠러지로 떨어지거나 장애물/적 등과 충돌했을때 Death Trigger가 발동 되어야합니다. 이 경우, Death Trigger의 구현 방법은 크게 두 가지로 나뉘어집니다.

첫 번째는 낭떠러지, 장애물, 적 등 충돌시 플레이어를 죽게 만드는 오브젝트에 Death Trigger를 구현하는 방법입니다. 위 그림과 같이 바닥에 DeathTrigger란 이름의 게임 오브젝트를 생성하고, Box 2d collider를 붙여 길게 늘어뜨린 후, Is Trigger를 체크해줍니다. 그리고, DeathTriggerScript를 만들어 DeathTrigger 오브젝트에 붙여줍니다.
using UnityEngine;
using System.Collections;

public class DeathTriggerScript : MonoBehaviour
{
  void OnTriggerEnter2D (Collider2D collidedObject)
  {
    collidedObject.SendMessage ("hitDeathTrigger");
  }
}
이렇게 구현하면, 이제 DeathTrigger 오브젝트의 붙인 Box 2d Collider에 무언가 충돌하는 순간 SendMessage 함수를 통해 충돌한 오브젝트에 hitDeathTrigger 함수가 호출됩니다(잘 이해가 안가시면 SendMessage 함수의 API를 참조하세요). 이제 플레이어의 collider가 붙어있는 오브젝트에 적당한 스크립트 공간을 찾아서 hitDeathTrigger 함수를 구현해 주면 됩니다. 저는 hitDeathTrigger 함수에 플레이어가 죽는 상태로 바뀌도록 구현하였습니다.

두 번째 방법은 첫 번째 방법과 반대로 플레이어쪽에서 부딪치는 오브젝트를 체크하는 방식입니다. 먼저 DeathTrigger 오브젝트를 첫 번째 방법처럼 Box 2d collider를 붙여 길게 늘어뜨리고, Is Trigger를 체크합니다. 스크립트는 붙이지 않으며, 대신 Tag에 DeathTrigger라는 태그를 선언해줍니다. collider가 붙어있는 플레이어 오브젝트에 적당한 스크립트 공간을 찾아서 아래와 같이 onTriggerEnter2D 함수를 구현합니다(플레이어의 collider에도 IsTrigger를 체크해야합니다).
void OnTriggerEnter2D (Collider2D collidedObject)
{
 switch (collidedObject.tag) {
 case "DeathTrigger":
  // Player hit the death trigger - kill 'em!
  // 여기에 플레이어가 죽도록 구현!
  break;
 }
}

첫 번째 방법은 DeathTrigger 오브젝트 마다 부딪치는 수 많은 오브젝트의 경우의 수를 생각해서 구현을 해야함으로 비용이 많이 드는 작업입니다. 반면 두 번째 방법은 DeathTrigger 오브젝트들에 태그를 붙여주고, 플레이어와 적 유닛 정도에만 OnTriggerEnter2D를 구현해주면 끝나는 일이니 비용이 비교적 적게 듭니다. 이러한 이유로  Death Trigger 구현에는 일반적으로 두 번째 방법을 더 선호합니다.

댓글 1개: