Unity C# 기초집LESSON 16
ScriptableObject
난이도초급
예상 시간45분
선수지식15강 GameSession
16강. ScriptableObject
1. 이번 강의에서 해결할 문제
Blue·Orange enum과 점수 값이 여러 스크립트에 흩어져 새 택배 종류를 추가할 때 코드를 계속 수정합니다. 변경이 잦은 타입별 규칙을 데이터 에셋으로 옮깁니다.
2. 학습 목표
3. 핵심 개념
ScriptableObject는 GameObject에 붙지 않고 Project에 Asset으로 저장되는 데이터 컨테이너입니다. 여러 Prefab이 같은 읽기 전용 규칙을 참조할 수 있습니다. 배포된 게임에서 플레이 기록을 저장하는 용도가 아니라 제작 단계에서 만든 규칙을 읽는 용도입니다. 자세한 동작은 Unity 6 ScriptableObject 문서를 확인하세요.
4. 단계별 실습
C# · 파일 경로: Assets/DeliverySorter/Scripts/Data/PackageTypeData.cs
PackageTypeData.cs
using UnityEngine;
[CreateAssetMenu(fileName = "PackageType", menuName = "Delivery Sorter/Package Type")]
public sealed class PackageTypeData : ScriptableObject
{
[field: SerializeField] public string Id { get; private set; } = "blue";
[field: SerializeField] public Color DisplayColor { get; private set; } = Color.blue;
[field: SerializeField, Min(0)] public int Score { get; private set; } = 100;
}
C# · 파일 경로: Assets/DeliverySorter/Scripts/Packages/PackageItem.cs
PackageItem.cs
using UnityEngine;
public sealed class PackageItem : MonoBehaviour
{
[SerializeField] private SpriteRenderer packageRenderer;
public PackageTypeData Type { get; private set; }
public bool IsResolved { get; private set; }
public void Configure(PackageTypeData type)
{
Type = type;
IsResolved = false;
packageRenderer.color = type.DisplayColor;
}
public bool TryResolve()
{
if (IsResolved) return false;
IsResolved = true;
return true;
}
}
Unity Editor·Inspector 작업
- Create 메뉴에서
BluePackage,OrangePackage데이터 에셋을 만듭니다. - 서로 다른 Id, Color와 Score를 입력합니다.
- SortZone도
acceptedKind대신PackageTypeData acceptedType을 받아 참조 일치로 비교합니다. - Spawner가 생성 직후
package.Configure(selectedType)을 호출하도록 준비합니다.
5. 코드가 동작하는 이유
두 택배는 같은 Prefab과 코드를 사용하지만 서로 다른 ScriptableObject 참조를 받아 색상과 점수가 달라집니다. 규칙 데이터가 한 에셋에 있어 새 타입 추가가 코드 분기 추가로 이어지지 않습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2ScriptableObject 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
16강. ScriptableObject 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.