Menu
CoddyTech

체력과 피해

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

피해 시스템에는 두 개의 스크립트가 필요합니다. 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

챌린지

중급

훈련용 총이 더미와 갑옷을 입은 기사에게 발사됩니다. 총의 Shooter 스크립트는 준비되어 있습니다. 왼쪽 및 오른쪽 화살표 키로 총을 돌리고, 스페이스바를 눌러 총알을 발사합니다. 명중 시 피해가 적용되도록 스크립트 두 개를 작성하세요.

더미와 기사에 적용되는 Health(Inspector에서 hp와 armor를 설정합니다):

  • 공개 메서드 TakeDamage(int amount): hp를 amount에서 armor를 뺀 값만큼 감소시키되, 항상 최소 1만큼 감소시킵니다.
  • 명중할 때마다 객체의 이름과 남은 hp를 Dummy hp: 2와 같이 로그에 기록합니다.
  • hp가 0 이하가 되면 객체를 제거합니다.

각 총알에 적용되는 Bullet(Inspector에서 damage를 2로 설정합니다):

  • 총알이 Health가 있는 대상에 명중하면 해당 대상의 TakeDamage(damage)를 호출합니다.
  • 무엇에 명중하든, 벽을 포함해 총알을 제거합니다.

Play를 눌러 더미와 기사를 쓰러뜨린 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

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

    public void TakeDamage(int amount)
    {
        // amount에서 armor를 뺀 만큼(최소 1) 체력을 잃고, 남은 체력을 로그에 기록한 뒤 0이 되면 파괴
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

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