[Unity] Scriptable Object
개요
Scriptable Object는 데이터를 게임 오브젝트와 분리해서 저장할 수 있게 해주는 Unity 전용 데이터 컨테이너
- MonoBehaviour: 오브젝트에 붙어서 동작하는 스크립트
- Scriptable Object: 프로젝트 파일처럼 존재하는 데이터 저장용 객체
왜 사용하는가?
보통 게임을 만들다 보면 아래와 같은 데이터가 많아진다
- 무기 정보
- 몬스터 스탯
- 아이템 데이터
- 스킬 정보
이걸 전부 MonoBehaviour에 넣으면:
- 같은 데이터가 여러 오브젝트에 중복 저장됨
- 메모리 낭비
- 관리 힘듦
- 수정 시 일일이 찾아야함
그래서 데이터를 따로 빼서 관리하는 게 Scriptable Object다
예시
using UnityEngine;
[CreateAssetMenu(fileName = "ResourceAsset", menuName = "Scriptable Objects/ResourceAsset")]
public class ResourceAsset : ScriptableObject
{
public string ResourceID;
public GameObject DropPrefab;
[HideInInspector]
public ResourceData Data;
}
현재 진행중인 프로젝트에서 사용하는 코드이다.
자원을 캐거나 몬스터를 죽였을 때 나오는 아이템들을 Scriptable Object로 관리하려고 스크립트를 만들었다
Scriptable Object를 만들어서 스크립트에 ResourceAsset 필드를 만들어 정보를 넘겨주면
데이터 처리가 편하다


![[Unity] PC 세이브 데이터 Android로 옮기기](https://data.develog.develrocket.com/upload/develog/muchan/1792206352286-hd4xz4/_____2026-10-17_114953.png)
![[Unity] 제네릭 박싱 예방](https://data.develog.develrocket.com/upload/develog/gmumdev/1792123312021-bhxx2i/_____.png)