아이템 데이터를 효율적으로 관리하기 위해 ScriptableObject를 활용한 ItemData 클래스를 작성했다. 이번 작업에서는 아이템의 타입, 아이디, 이름, 설명, 아이콘, 데미지와 같은 다양한 정보를 하나의 스크립터블 오브젝트에 담아서 관리할 수 있도록 구현했다. 특히 레벨 별로 데미지와 개수를 배열로 설정하여 아이템의 성장 구조도 정의했다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "Item", menuName = "Scriptable Object/ItemData")]
public class ItemData : ScriptableObject
{
public enum ItemType
{
Melee,
Range,
Glove,
Shoe,
Heal
}
[Header("Main Info")]
public ItemType itemType;
public int itemId;
public string itemName;
public string itemDesc;
public Sprite itemIcon;
[Header("Level Data")]
public float baseDamage;
public int baseCount;
public float[] damages;
public int[] counts;
[Header("Weapon")]
public GameObject projectile;
}


ScriptableObject를 사용하면서 가장 좋았던 점은 코드와 데이터의 분리가 명확해졌다는 것이다. 이전에는 코드 내에서 아이템의 속성을 직접 관리해야 해서 복잡하고 유지보수가 어려웠는데, 이제는 데이터를 각각의 ScriptableObject로 관리할 수 있어서 직관적으로 데이터를 추가하고 수정할 수 있었다.
ScriptableObject의 장점
데이터와 코드의 분리: 데이터와 로직을 분리할 수 있어 코드가 깔끔해지고, 데이터 변경 시에도 코드에 영향을 주지 않음.
재사용성과 관리의 용이성: 하나의 ScriptableObject 클래스로 다양한 아이템 데이터를 손쉽게 생성하고 관리할 수 있음. 인스펙터를 통해 값을 직관적으로 설정 가능.
성능 최적화: 메모리 효율성이 높고, 같은 데이터를 여러 오브젝트에서 참조해도 메모리 사용량이 낮음.
유지보수와 확장성: 데이터 추가 및 수정이 용이해져 유지보수가 쉬워지고, 코드 변경 없이 새로운 아이템 타입이나 속성을 손쉽게 추가 가능.
추가적으로 ScriptableObject를 활용해 스킬이나 적 캐릭터 데이터도 관리해볼 계획이다. 데이터가 많아질수록 ScriptableObject의 장점이 더욱 두드러질 것 같고, 이를 활용해 다양한 게임 요소들을 효율적으로 관리해보고 싶다.