Unity/Unity Study

[Unity] 개인 프로젝트 중, ScriptableObject 를 활용한 아이템 설정

Jee-U 2025. 3. 12. 20:41

 

ScriptableObject 

- 유니티에서 제공하는 데이터 컨테이너로 게임에서 사용되는 데이터를 게임 리소스에 미리 저장하여 사용할 수 있다.

 

 

ScritableObjetct를 사용하려면 먼저 C# 스크립트에서 클래스를 선언해야 한다.

// "Assets > Create" 메뉴에서 "New Item"으로 표시됨
// 새 ScriptableObject를 생성하면 기본 파일명은 "Item"이 됨
// 코드에서 직접 생성할 경우 매개변수 없이 사용 가능, ()생략
[CreateAssetMenu(fileName = "Item", menuName = "New Item")]

// ScriptableObject를 상속받아 데이터 클래스로 사용
public class ItemData : ScriptableObject
{

}

 

 

이렇게 하면 Project(Asset) 쪽에서 스크립터블 오브젝트 생성이 가능해진다.

 

 


 

ScriptableObject를 이용하여 ItemData를 만들어보자,

// 아이템 타입
public enum ItemType
{
    Equipable,
    Consumable,
    Resource
}

// 소모품 타입(스탯)
public enum ConsumableType
{
    Health,
    Hunger,
    Stamina
}

// 소모품에 들어갈 일시적으로 올려줄 스탯 타입
public enum TimeConsumableType
{
    Speed,
    Jump
}

// 자원 타입, 값
[Serializable]
public class ItemDataConsumable
{
    public ConsumableType type;
    public float value;
}

// 자원 타입, 값 / 지속시간
[Serializable]
public class ItemTimeConsumableType
{
    public TimeConsumableType type;
    public float value;
    public float duration;
}


[CreateAssetMenu(fileName = "Item", menuName = "New Item")]

public class ItemData : ScriptableObject
{
    [Header("Info")]
    public string displayName;
    public string description;
    public ItemType type;
    public Sprite icon;
    public GameObject dropPrefab;

	// 아이템을 중복으로 얻을 수 있는지와 최대갯수
    [Header("Stacking")]
    public bool canStack;
    public int maxStackAmount;
	
    [Header("Consumable")]
    public ItemDataConsumable[] consumables;
    public ItemTimeConsumableType[] timeconsumable;
	
    // 장비
    [Header("Equip")]
    public GameObject equipPrefab;
}

아이템 타입은 총 세가지, 장비/소모품/자원 세개로 분류해두었으며 각각
장비에는 장착기능과 자원채집이 가능한 기능을 추가,

예시, 도끼

소모품은 사용하면 설정된 값만큼 스탯이 회복되거나 일부 스탯이 잠시 올라가는 형식으로,

예시, 토마토

자원은 나뭇가지와 같은 자원에서 얻을 수 있는 일반 자원으로 두었다.

 

CanStack은 체크해주어야 한개의 아이템에 갯수만 쌓이는 형식으로 인벤토리에 들어간다.

장비를 제외한 아이템을 모두 체크해주었으며 최대로 획득 가능한 갯수는 12개로 해주었다.

 

 

예시, 복숭아 - 오브젝트에 적용

위와같이 적용해주면 아이템 생성 끝!

 

 

가까이 가면 아이템과 설명이 나오며 e키 입력 시 획득, 

장비는 장착 / 자원은 사용 혹은 사용불가 시 버튼이 나타나지 않게 해주었다.