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로 만들어주면

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

데이터 파일을 만들어서 데이터를 추가할 수 있다.
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을 누르면 다음줄로 넘어간다.