Menu
CoddyTech

IDamageable

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 6번째.

게임에는 피해를 입을 수 있는 대상이 많지만, 서로 공통점은 거의 없습니다. 플레이어는 체력이 있고, 상자는 한 번 맞으면 부서집니다. 공통 기본 클래스를 만들면 이들을 하나의 계층에 억지로 넣게 됩니다. 인터페이스는 이들이 공유하는 한 가지를 명시하고, 각 스크립트는 이를 각자의 방식으로 구현합니다:

public interface IDamageable
{
    void TakeDamage(int amount);
}
public class PlayerHealth : MonoBehaviour, IDamageable
{
    public int hp = 10;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        Debug.Log("Ouch! hp: " + hp);
    }
}
public class Crate : MonoBehaviour, IDamageable
{
    public void TakeDamage(int amount)
    {
        Destroy(gameObject);
    }
}

스크립트에는 여전히 기본 클래스인 MonoBehaviour가 하나 있고, 그 뒤에 인터페이스를 나열합니다. 인터페이스는 별도의 파일인 IDamageable.cs에 넣으며 MonoBehaviour를 상속하지 않습니다. 인터페이스는 컴포넌트가 아니므로 단독으로 오브젝트에 추가할 수 없습니다. 인터페이스를 나열한 클래스에는 public TakeDamage(int)가 있어야 하며, 그렇지 않으면 컴파일되지 않습니다.

피해를 주는 쪽은 특정 클래스가 아니라 인터페이스를 요청합니다:

// Fireball.cs
void OnCollisionEnter(Collision collision)
{
    IDamageable target = collision.gameObject.GetComponent<IDamageable>();
    if (target != null)
    {
        target.TakeDamage(3);
    }
    Destroy(gameObject);
}

화염구는 같은 코드로 플레이어에게 피해를 주고 상자를 부숩니다. 나중에 새로운 종류의 대상이 추가되어도 이 코드를 변경할 필요가 없습니다. Unity에서는 Inspector에 인터페이스 타입의 필드를 표시하지 않으므로, 스크립트는 GameObject 또는 컴포넌트를 가지고 있다가 화염구처럼 해당 오브젝트에서 인터페이스를 가져옵니다.

challenge icon

챌린지

쉬움
Slam()을 호출하고, 이 메서드는 radius 안에 있는 모든 콜라이더를 찾습니다. 광장에 있는 세 가지 대상은 각각 고유한 방식으로 피해를 입으며, 서로 다른 점은 그뿐입니다.

  • Snowman: 피해를 1포인트 입을 때마다 모든 축에서 크기가 0.25씩 줄어듭니다(처음 크기는 1.5입니다). 크기가 0.5 이하가 되면 녹으므로 눈사람을 파괴합니다.
  • Bell: 피해를 1포인트 입을 때마다 Dong을 한 번 기록합니다(피해를 2 입으면 두 번 기록합니다). 또한 피해 포인트를 rings에 더합니다.
  • Scarecrow: 첫 번째 공격을 받으면 피해량과 관계없이 z축을 기준으로 90도 회전하며 쓰러집니다. 이후 공격은 아무 변화도 일으키지 않습니다.

IDamageable.cs는 메서드 하나인 void TakeDamage(int amount)를 포함하는 인터페이스를 선언합니다. Snowman, Bell, Scarecrow가 이 인터페이스를 구현하도록 하고, 각각 고유한 반응을 구현하세요. 그런 다음 Slam에서 찾은 각 콜라이더의 IDamageable에 대해 TakeDamage(power)를 호출하세요. 지면처럼 IDamageable이 없는 콜라이더는 건너뜁니다.

플레이를 누르고, 각 대상에게 다가가 망치를 휘두른 다음, 확인을 누르세요.

직접 해보기

using UnityEngine;

public class Snowman : MonoBehaviour
{
}
quiz icon실력 점검

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

Unity 게임 아키텍처의 모든 레슨