IT/공부 정리

[UNITY] 게임 개발 시 데이터와 이벤트 관리하기 - enum, ScriptableObject, Static Events

rinix_x 2025. 8. 25. 03:50

N년 개발을 하면서 사실 이 개념에 생소했는데

요번에 이용하게 된 겸 확실히 정리하고자 이 게시물을 작성하게 되었습니다.


 

ENUM (열거형)

 

 

 

 

  • 정의: enum은 미리 정의된 상수 집합을 이름으로 관리하는 자료형이다.
  • 상태/타입관리 사용하면 좋다.
  • 장점
    • 숫자 값 대신 의미 있는 이름을 사용하여 가독성을 높인다
    • 타입 안전성을 제공한다. (문자열보다 안전)
  • 예시

 

public enum RatType
{
    Normal,
    Golden,
    Poison,
    Bomb
}
  • 추천 방식과 주의할 점
    • 문자열 대신 enum 사용하기 (오타 방지, 성능 ↑)
    • 단, enum 값이 너무 많아지면 ScriptableObject로 관리하는 게 더 낫다

 

ScriptableObject

 

  • 정의: Unity에서 제공하는 데이터 컨테이너.
  • 게임 밸런스 데이터, 아이템 정보, 적 스펙, 스킬 설정 등 데이터 중심의 관리 필요할 때 사용
  • Prefab을 매번 수정하지 않고 값만 바꿔야 할 때 사용
  • 장점
    • 씬에 종속되지 않고 독립적으로 데이터 관리 가능
    • Inspector에서 직관적으로 수정 가능
    • Prefab처럼 재사용성이 좋음
  • 예시
[CreateAssetMenu(fileName = "RatData", menuName = "Game/RatData")]
public class RatData : ScriptableObject
{
    public RatType ratType;
    public int scoreValue;
    public Sprite ratSprite;
}
  • 추천 방식과 주의할 점
    • 데이터 중심 게임일수록 적극 활용
    • Resources.Load보다는 Inspector에서 Drag&Drop을 권장 (런타임 성능 최적화)
    • 변경 가능성이 많은 수치들은 Prefab보다는 ScriptableObject에 몰아두기

 

Static Events

 

 

  • 정의: static class에 Action 이벤트를 등록해서, 게임 전역에서 발생하는 이벤트를 관리하는 방식.
  • 특정 이벤트(예: 적 잡힘, 아이템 획득, 폭탄 폭발 등)가 여러 곳에서 반응해야 할 때 사용
  • UI 업데이트, 사운드 재생, 점수 시스템 등 다양한 객체를 연결해야 할 때 사용
  • 장점
    • GameManager 같은 무거운 싱글톤에 의존하지 않아도 됨
    • 전역 접근 가능 & 호출 간단
    • 이벤트 기반으로 코드가 깔끔해짐 (Observer 패턴과 유사)
  • 예시
[CreateAssetMenu(fileName = "RatData", menuName = "Game/RatData")]
public class RatData : ScriptableObject
{
    public RatType ratType;
    public int scoreValue;
    public Sprite ratSprite;
}
  • 추천 방식과 주의할 점
    • 사용 후 반드시 null 체크 필요
       
      RatGameEvents.OnRatCaught?.Invoke(RatType.Normal, 10);
    • 이벤트 해제(-=)를 잘 해줘야 메모리 누수 방지 가능
    • 작은 규모 프로젝트 → 편하고 빠름
    • 큰 규모 프로젝트 → Event Bus, Message System 같은 더 체계적인 방법 고려

 

 

 

 

 

 

 

 

 

 

반응형