스크립터블 오브젝트(ScriptableObject)는 평소 우리가 사용하는 스크립트와 다르게 대량의 데이터를 저장하는데 사용할 수 있는 데이터 컨테이너이고,
값의 사본이 생성되는 것을 방지하여 프로젝트의 메모리 사용을 줄일 수 있다.
ScriptableObject를 사용하면 MonoBehaviour 스크립트에 변경되지 않는 중복된 데이터를 저장하는 프리팹이 있는 프로젝트의 경우 유용하다.
ScriptableObject 사용방법
- 만들고 싶은 객체의 관련된 데이터 코드를 작성한다.
- 미리 상속된
MonoBehaviour대신ScriptableObject를 상속한다. - 클래스 선언부분 위에 [CreateAssetMenu()] 속성을 사용한다. (선택)
💻 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;
[CreateAssetMenu(fileName = "New Item", menuName = "New Item/item")]
public class Item : ScriptableObject
{
enum ItemType
{
Equipment, // 장비
Food, // 음식
Ingredient, // 재료
Used, // 사용가능
ETC // 기타
}
public string itemName; // 아이템 이름
public Sprite itemImage; // 아이템 이미지
public ItemType itemType; // 아이템 타입
public int value; // 가격
}
※ [CreateAssetMenu()]란?
- 해당 스크립트를 편리하게 가져와서 사용할 수 있다.
※ [CreateAssetMenu()] 사용방법
- CreateAssetManu(fileName = “”, menuName = “”, order = int값);
fileName: 새롭게 만들게 되면 해당 이름으로 임시 생성된다.menuName: Assets -> Create에서 표기될 이름 설정order: 메뉴에서 보여질 순서
📝 ScriptableObject에 대한 의견
소규모의 데이터를 편하게 관리할 수 있는 장점이 있지만, 대용량의 데이터를 관리하기엔 어려움이 있을 것으로 예상된다. 대규모의 데이터 관리방법은 엑셀로 하는 것이 편하기 때문이다.
외부 데이터를 파싱해서 사용하는 번거로움을 피하고, 데이터의 관리 부하가 크지 않다면
ScriptableObject를 사용하는 것이 편리하고 최적화에 도움될 것으로 생각한다.
내가 기존에 알던 방식은 npc 정보, item 정보 등 스크립트를 작성하고 해당 객체 컴포넌트에 할당하여 사용하였다.
이번에 알아낸 ScriptableObject를 통해 중복되는 데이터를 다룰 때 메모리를 효율적으로 사용할 수 있을 것 같다.