Menu
CoddyTech

Inspector의 열거형

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

enum 필드는 Inspector에서 드롭다운으로 표시되므로, 하나의 스크립트를 공유하는 오브젝트를 설정하는 편리한 방법입니다. 하나의 Pickup 프리팹으로 코인, 하트, 실드를 모두 처리할 수 있습니다. 레벨의 각 복사본은 드롭다운에서 종류를 지정하고, 스크립트는 그 값에 따라 분기합니다.

public enum PickupKind { Coin, Heart, Shield }

public class Pickup : MonoBehaviour
{
    public PickupKind kind;
    public int amount = 1;

    void OnTriggerEnter(Collider other)
    {
        if (!other.TryGetComponent(out PlayerStats stats)) return;
        switch (kind)
        {
            case PickupKind.Coin: stats.coins += amount; break;
            case PickupKind.Heart: stats.hp += amount; break;
            case PickupKind.Shield: stats.shielded = true; break;
        }
        Destroy(gameObject);
    }
}

씬은 각 선택 항목을 값의 숫자로 저장합니다. Coin은 0, Heart는 1, Shield는 2입니다. 값을 끝에 추가하는 것은 안전합니다. 앞에 값을 삽입하면, 예를 들어 { Gem, Coin, Heart, Shield }처럼 되면 모든 숫자가 밀리고, 모든 씬의 모든 픽업 종류가 바뀝니다. 값의 이름을 변경하는 것은 숫자가 그대로 유지되므로 안전합니다. 숫자를 Coin = 0, Heart = 1, Shield = 2처럼 명시하면, 저장된 선택 항목은 그대로 둔 채 나중에 이름의 순서를 바꿀 수 있습니다.

[System.Flags] enum은 여러 값을 한 번에 담습니다. 드롭다운에는 각 값 옆에 체크 표시가 있으며, Nothing과 Everything도 있습니다. 각 값은 고유한 비트가 필요하므로 숫자는 2의 거듭제곱이어야 합니다.

[System.Flags]
public enum Element { None = 0, Fire = 1, Ice = 2, Poison = 4 }

public Element immuneTo;   // Inspector에서 체크됨: Fire와 Poison

public void Hit(int damage, Element element)
{
    if (immuneTo.HasFlag(element)) return;
    hp -= damage;
}

|는 값을 결합합니다. Element.Fire | Element.Poison은 5입니다. HasFlag(x)는 x의 모든 값이 설정되어 있을 때 true를 반환하고, ToString()은 설정된 값을 Fire, Poison처럼 나열합니다.

challenge icon

챌린지

쉬움

기지에는 문이 세 개 있습니다. 창고 문에는 빨간 키카드가, 연구실 문에는 파란 키카드가, 금고 문에는 두 카드가 모두 필요합니다. 각 문의 needs와 각 카드의 card는 Access 열거형을 사용해 Inspector에서 설정되어 있고, Door.cs와 Keycard.cs는 준비되어 있습니다. 화살표 키로 Player를 이동하며, Player의 KeyRing에는 주운 카드가 보관됩니다. KeyRing.cs를 완성하세요.

  • 여러 카드를 조합할 수 있는 열거형으로 Access를 만드세요. 그래야 문에 여러 카드가 필요하고, 키링에도 여러 카드를 보관할 수 있습니다. 네 가지 이름은 None, Red, Blue, Green으로 유지하세요.
  • Add(Access card)는 이미 키링에 있는 카드를 그대로 유지하면서 카드를 키링에 추가합니다.
  • Opens(Access needs)는 키링에 needs에 포함된 카드가 모두 있으면 true를 반환합니다.

플레이를 눌러 문을 확인하고, 카드를 주운 다음 확인을 누르세요.

직접 해보기

using UnityEngine;

public enum Access { None, Red, Blue, Green }

public class KeyRing : MonoBehaviour
{
    public Access cards;

    public void Add(Access card)
    {
        // 이미 있는 카드는 그대로 두고 새 카드를 링에 추가한다
    }

    public bool Opens(Access needs)
    {
        // 링에 needs에 포함된 모든 카드가 있으면 true
        return false;
    }
}
quiz icon실력 점검

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

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