이번에는 스크립터블 오브젝트(ScriptableObject)에 대해 정리해보겠습니다.
스크립터블 오브젝트는 대량의 데이터를 효율적으로 저장하고 관리할 때자주 사용됩니다.
특징 중 하나는 런타임 중에는 값이 변경되지 않는다는 점입니다.
따라서 아이템 정보, 플레이어 기본 능력치, 스킬 데이터 등 게임 중에 변하지 않는 고정 데이터를 저장할 때 매우 유용합니다.
생성을 하는 방법은 빈 스크립트를 생성 후 ScriptableObject를 상속 받아야 합니다
[CreateAssetMenu(fileName = "Item Data", menuName = "Scriptable/Item Data", order = int.MaxValue)]
public class ItemData : ScriptableObject
CreateAssetMenu 는 우클릭을 눌렀을때 직접 생성을 쉽게 할수 있도록 도와줍니다
fileName는 에셋 생성 시 기본 파일 이름 이고 menuName는 우클릭 메뉴 경로 입니다.
상속을 받으면
[SerializeField]
private string itemName;
public string ItemName => itemName;
[SerializeField]
private Sprite itemImg;
public Sprite ItemImg => itemImg;
[SerializeField]
private int itemPrice;
public int ItemPrice => itemPrice;
//
//public int ItemPrice => itemPrice == public int ItemPrice { get { return hp; } }
이렇게 쓰고 오른쪽 클릭으로 생성을 하면

이렇게 string , sprite , int 를 입력할수 있습니다.
그런대
열거형 값을 넣고 싶다면
public enum ItemTpyes
{
None = 0,
Weapon = 1 << 1,
Armor = 1 << 2,
Shoes = 1 << 3,
}
// ScriptableObject 상속 받는쪽에
[SerializeField]
private ItemTpyes itemType;
public ItemTpyes ItemType => itemType;
이렇게 간단하게 추가 할수 있습니다 추가하면

이렇게 추가를 할수 있습니다.
그런대 아이템을 보면 이제 공격력 증가나 방어력 증가와 같이 추가는 해야하는대 하나 하나 추가를 하면
너무 비효율적으로 추가 해야 합니다. 이럴경우에는 enum class 와 [System.Serializable] 그리고 List를 이용하면
효율적으로 추가 할수 있습니다.
public enum ItemEffect
{
None = 0,
AttackDamage = 1 << 1,
AttackDelay = 1 << 2,
AttackSpeed = 1 << 3,
ConditionPower = 1 << 4,
ConditionTime = 1 << 5,
RollingSpeed = 1 << 6,
RollDuration = 1 << 7,
}
//ScriptableObject 상속 받는쪽에
[System.Serializable]
public class ItemDatas
{
public ItemEffect effectType;
public float value;
}
[SerializeField]
private List<ItemDatas> effects;
public List<ItemDatas> Effects => effects;
이것들을 추가 하면

이렇게 추가 가 됩니다.
여기에서 +를 누르면 List에 내가 원하는 것을 추가 할수 있습니다.

'유니티 개발 > 사이드 뷰 게임' 카테고리의 다른 글
| Unity 2D 게임 UI - ESC 눌렀을 때 멈춤 화면 (0) | 2025.07.18 |
|---|---|
| Unity 2D 게임 UI - 체력 바 및 시간 구현 (0) | 2025.07.18 |
| Unity 2D hit,dead 구현 (0) | 2025.07.18 |
| Unity 2D 몬스터 기본 움직임 및 공격 (0) | 2025.07.17 |
| Unity 2D 캐릭터 공격 구현 (0) | 2025.07.17 |