Inspector의 열거형
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 20번째.
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입니다. 모든 값이 x에 설정되어 있으면 HasFlag(x)는 true이고, ToString()은 설정된 값을 Fire, Poison처럼 나열합니다.
챌린지
쉬움문에 여러 키카드가 필요하고 키링에도 여러 키카드를 보관할 수 있게 하세요.
KeyRing.cs에서Access위에[System.Flags]를 넣고, 값을None = 0, Red = 1, Blue = 2, Green = 4로 지정하세요.Add(Access card)는 기존 키카드를 유지합니다:cards |= card;.Opens(Access needs)는 키링에needs의 모든 키카드가 있을 때만 참을 반환합니다.
‘플레이’를 누르고 두 키카드를 모두 주우세요. Vault가 열립니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
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;
}
}
Unity 게임 아키텍처의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드