게임개발 캠프 35일차

IIRU·2026년 7월 3일

Data관리

ItemData.cs

using UnityEngine;
using System.Collections.Generic;
using System;

[Serializable]
public class Item
{
    public int id;
    public string name;
    public int price;


    public Item(int id, string name, int price)
    {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public Item Clone()
    {
        return new Item(id, name, price);
    }
}



[CreateAssetMenu(fileName = "ItemData", menuName = "Data/Item")]
public class ItemData : ScriptableObject
{
    public List<Item> itemList = new List<Item>();
} 

위 코드를 ScriptableObject로 만들어주면

이렇게 데이터 파일을 만들수있다.

데이터 파일을 만들어서 데이터를 추가할 수 있다.

DataManager.cs

using UnityEngine;
using System.Collections.Generic;
using System.Linq;

public class DataManager : MonoBehaviour
{
    public static DataManager instance;
    private List<Item> itemList = new List<Item>();

    Dictionary<int, Item> items = new Dictionary<int, Item>();

    [SerializeField] private ItemData itemData;

    private void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);
    }

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        LoadItemData();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void LoadItemData()
    {
        itemList.Clear();

        for(int i=0; i < itemData.itemList.Count; i++)
        {
            Item item = itemData.itemList[i].Clone();
            items[item.id] = item;
            //itemList.Add(item);
        }

    }

    public Item GetItemData(int id)
    {
        return items.GetValueOrDefault(id);
        //return itemList.Where(item => item.id == id).FirstOrDefault();
    }

}

데이터 매니져를 만들어서 아까 만들어둔 데이터 파일에서 데이터들을 가져오는 코드

 private void LoadItemData()
{
    itemList.Clear();

    for(int i=0; i < itemData.itemList.Count; i++)
    {
        Item item = itemData.itemList[i].Clone();
        items[item.id] = item;
        //itemList.Add(item);
    }

}

가져온 데이터를 내부에 저장한 후 사용하는 코드

public Item GetItemData(int id)
{
    return items.GetValueOrDefault(id);
    //return itemList.Where(item => item.id == id).FirstOrDefault();
}

데이터는 키값과 밸류로 나눠진 디렉토리를 사용하는 것이 가장 좋다.

디버깅


유니티에 연결을 누르고 검사하고 싶은 줄에 F9번을 눌러주면

빨간줄이 나오고 게임내에서 빨간줄 부분에서 멈춘다.
다음 줄로 실행을 넘기고 싶다면 F10을 누르면 다음줄로 넘어간다.

profile
초보 개발자 블로그입니다!

0개의 댓글