경량 데이터 저장
ScriptableObject는 메모리를 효율적으로 사용하여 가벼운 데이터 객체를 생성할 수 있음. 주로 자주 사용되는 값이나 데이터 셋을 저장하는 데 적합
데이터 관리
스크립터블 오브젝트는 게임에서 반복적으로 사용되는 데이터(예: 아이템 정보, 캐릭터 능력치 등)를 관리하기 좋음.
이는 메모리와 성능을 효율적으로 사용할 수 있도록 도와줌
데이터 재사용
여러 오브젝트나 스크립트가 같은 스크립터블 오브젝트를 참조할 수 있어서 데이터를 재사용하거나 쉽게 업데이트할 수 있음
직렬화 가능
유니티 에디터 내에서 직접 설정하고 저장할 수 있도록 직렬화가 가능하여 인스펙터에 변수들이 노출됨. 인스펙터(Inspector)에서 에셋처럼 관리될 수 있음
프로젝트 패널에서 별도의 에셋 파일로 생성되어, 수동으로 수정하거나 관리하기가 용이
런타임 데이터 유지
MonoBehaviour와 달리, 씬이 전환되어도 데이터가 유지되므로 각종 설정 값이나 상태를 유지하는 데 유리함
성능 최적화
게임 오브젝트에 붙지 않기 때문에, MonoBehaviour와 달리 각 프레임에서 업데이트되지 않음. 이는 성능을 최적화하는 데 도움이 됩니다.
스크립터블 오브젝트를 활용하면 효율적으로 데이터 중심 개발을 할 수 있고, 특히 다양한 값들을 유지하면서 반복적으로 참조해야 할 때 유용함
다양한 데이터 템플릿을 손쉽게 생성하고 사용할 수 있음
아이템 데이터 : 아이템의 이름, 설명, 아이콘 등을 스크립터블 오브젝트에 저장해 다양한 아이템을 손쉽게 관리
캐릭터 설정 : 캐릭터의 능력치, 스킬 등을 관리하는 용도로 사용
레벨 설정 : 게임 레벨에 대한 난이도, 목표, 등장하는 몬스터 정보 등을 스크립터블 오브젝트로 관리
- [CreateAssetMenu] 속성
- fileName : 새로 생성되는 스크립터블 오브젝트의 기본 파일 이름을 지정함
- menuName : 에디터에서 새 스크립터블 오브젝트를 생성할 때 표시될 경로를 지정
- order : 순서를 나타냄
- 유니티 에디터에서 사용하는 방법
- 유니티 에디터에서 프로젝트 창을 열고, 빈 공간에서 마우스 오른쪽 클릭
- Create > Game > ItemData 메뉴를 선택
- 새 스크립터블 오브젝트가 생성되며 기본 파일 이름이 NewPlayerStats로 설정됨
- 생성된 ItemData 오브젝트를 클릭하여 인스펙터 창에서 itemName, itemID, itemIcon, description 등의 값을 수정할 수 있음
using UnityEngine;
[CreateAssetMenu(fileName = "NewCharacterData", menuName = "CharacterData")]
public class CharacterData : ScriptableObject
{
public string characterName;
public int health;
public int attackPower;
}
public class Character : MonoBehaviour
{
public CharacterData characterData;
void Start()
{
Debug.Log("캐릭터 이름: " + characterData.characterName);
Debug.Log("체력: " + characterData.health);
Debug.Log("공격력: " + characterData.attackPower);
}
}
using UnityEngine;
[CreateAssetMenu(fileName = "NewItemData", menuName = "Game/ItemData")]
public class ItemData : ScriptableObject
{
public string itemName;
public int itemID;
public Sprite itemIcon;
public string description;
}