Unity씬과 데이터

ScriptableObject 기본

씬 오브젝트가 아닌 에셋 형태로 설정과 데이터를 분리할 때 유용한 Unity `ScriptableObject` 기본 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
[CreateAssetMenu(menuName = "Data/Weapon Data")]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public int damage;
}

설명

  • ScriptableObject는 씬에 존재하는 컴포넌트가 아니라 프로젝트 에셋으로 저장되는 데이터 컨테이너입니다.
  • 여러 오브젝트가 같은 설정을 공유하거나, 디자이너가 데이터를 직접 수정해야 할 때 특히 유용합니다.
  • 프리팹마다 값 복제가 퍼지는 문제를 줄이고 데이터 중심 구조를 만들기 쉽습니다.
  • 런타임 변경값과 원본 에셋 값을 구분하는 감각이 중요합니다.

짧은 예제

csharp
public class WeaponView : MonoBehaviour
{
    [SerializeField] private WeaponData data;

    private void Start()
    {
        Debug.Log($"{data.weaponName} / {data.damage}");
    }
}

빠른 정리

항목설명
에셋 데이터씬 밖에서 재사용 가능한 데이터
공유 설정여러 오브젝트가 같은 값을 참조 가능
CreateAssetMenu인스펙터에서 에셋 생성 지원
프리팹 분리데이터와 표현을 나누기 쉬움
런타임 값원본 에셋과 혼동하지 않도록 주의

주의할 점

플레이 중 ScriptableObject 값을 직접 바꾸면 에셋 상태와 런타임 상태를 헷갈리기 쉽습니다. 원본 데이터인지, 세션 중 임시 상태인지 먼저 구분하는 편이 좋습니다.

참고 링크

2 sources