[Unity] Scriptable Object

muchan
muchan
∙∙조회 5

개요

Scriptable Object는 데이터를 게임 오브젝트와 분리해서 저장할 수 있게 해주는 Unity 전용 데이터 컨테이너

  • MonoBehaviour: 오브젝트에 붙어서 동작하는 스크립트
  • Scriptable Object: 프로젝트 파일처럼 존재하는 데이터 저장용 객체

왜 사용하는가?

보통 게임을 만들다 보면 아래와 같은 데이터가 많아진다

  • 무기 정보
  • 몬스터 스탯
  • 아이템 데이터
  • 스킬 정보

이걸 전부 MonoBehaviour에 넣으면:

  • 같은 데이터가 여러 오브젝트에 중복 저장됨
  • 메모리 낭비
  • 관리 힘듦
  • 수정 시 일일이 찾아야함

그래서 데이터를 따로 빼서 관리하는 게 Scriptable Object다

예시

csharp
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 필드를 만들어 정보를 넘겨주면

데이터 처리가 편하다