기본 패턴
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