Menu
CoddyTech

체력과 피해

Coddy Unity 여정의 물리와 게임플레이 섹션에 포함된 레슨. 71개 중 55번째.

피해 처리에는 두 개의 스크립트가 필요합니다. 다칠 수 있는 모든 오브젝트에는 체력을 관리하는 Health 스크립트가 붙어 있고, 피해를 주는 오브젝트는 이 스크립트를 찾아 메서드를 호출합니다. 세 번 맞으면 부서지는 상자와, 위에 떨어지는 오브젝트에 피해를 주는 가시에 적용한 Health 예시는 다음과 같습니다:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage는 public이므로 다른 스크립트에서 호출할 수 있으며, hp를 변경하는 코드는 이것뿐입니다. 가시, 총알, 용암은 모두 같은 메서드를 호출하고, 0이 무엇을 의미하는지는 Health 스크립트만 결정합니다. 상자를 파괴할지, 게임을 끝낼지, 아니면 죽음 애니메이션을 재생할지 결정하는 것입니다. 각 스크립트는 클래스 이름을 딴 별도의 파일에 저장됩니다.

GetComponent<Health>()는 바닥처럼 Health가 없는 오브젝트에 대해 null을 반환하므로, 가시는 호출하기 전에 확인합니다. TryGetComponent(out Health health)는 한 번의 호출로 검색과 확인을 수행합니다. Health가 있으면 true를 반환하고 health에 값을 채웁니다.

challenge icon

챌린지

중급

명중할 때마다 피해를 줍니다. Bullet은 준비되어 있으며, 맞힌 대상에 TakeDamage(2)를 호출합니다.

  1. Health에서 TakeDamage(int amount)를 완성하세요. Mathf.Max(amount - armor, 1)만큼 hp에서 빼세요.
  2. name + " hp: " + hp를 로그로 출력하세요. 예를 들어 Dummy hp: 2와 같이 출력됩니다.
  3. hp <= 0일 때 Destroy(gameObject);를 호출하세요.

‘플레이’를 누르고 더미를 두 번 쏘세요. Dummy hp: 2가 로그에 출력된 다음 더미가 사라집니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // armor를 뺀 amount만큼(최소 1) hp를 줄이고, 남은 hp를 로그에 기록한 뒤 0이 되면 오브젝트를 파괴한다
    }
}

물리와 게임플레이의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드