ScriptableObject를 활용한 아이템 데이터 관리

김보근·2024년 9월 19일

Unity

목록 보기
86/113

오늘 한 일

아이템 데이터를 효율적으로 관리하기 위해 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의 장점이 더욱 두드러질 것 같고, 이를 활용해 다양한 게임 요소들을 효율적으로 관리해보고 싶다.

profile
게임개발자꿈나무

0개의 댓글