public class Inventory : ScriptableObject, ISerializationCallbackReceiver
{
public InventoryData itemList;
public string savePath;
private ItemDatabase dataBase;
public int invenCnt;
public bool full = false;
private void OnEnable()
{
#if UNITY_EDITOR
dataBase = (ItemDatabase)AssetDatabase.LoadAssetAtPath
("Assets/Resources/Item Database.asset", typeof(ItemDatabase));
#else
dataBase = Resources.Load<ItemDatabase>("Database");
#endif
}
private void Awake()
{
full = false;
invenCnt = 1;
}
public void AddItem(Item _item, int _amount)
{
itemList.Items.Add(new inventorySlot(dataBase.GetId[_item] ,_item, _amount));
full = itemList.Items.Count >= invenCnt;
}
public void Save()
{
string saveData = JsonUtility.ToJson(this, true);
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(string.Concat(Application.persistentDataPath, savePath));
bf.Serialize(file, saveData);
file.Close();
}
public void Load()
{
if (File.Exists(string.Concat(Application.persistentDataPath, savePath)))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(string.Concat(Application.persistentDataPath, savePath),
FileMode.Open);
JsonUtility.FromJsonOverwrite(bf.Deserialize(file).ToString(), this);
file.Close();
}
}
[ContextMenu("Clear")]
public void Clear()
{
itemList = new InventoryData();
full = false;
}
public void OnAfterDeserialize()
{
for (int i = 0; i < itemList.Items.Count; i++)
{
itemList.Items[i].item = dataBase.GetItem[itemList.Items[i].Id];
}
}
public void OnBeforeSerialize()
{
}
}
[System.Serializable]
public class InventoryData
{
public List<inventorySlot> Items = new List<inventorySlot>();
}
[System.Serializable]
public class inventorySlot
{
public int Id;
public Item item;
public int amount;
public inventorySlot(int _id, Item _item, int _amount)
{
Id = _id;
item = _item;
amount = _amount;
}
public void AddAmount(int value)
{
amount += value;
}
}
private void OnApplicationQuit()
{
inventory.itemList.Items.Clear();
inventory.invenCnt = 1;
inventory.full = false;
}
이걸로 초기화 시킴
님코드 어려워서 잘 모르겠는데 저는 이렇게 인벤토리 저장/불러오기 했음
for(int i = 1; i < inventoryECapacity; i++) { if(i < inventoryEList.Count) { Equipment a = inventoryEList[i]; inventoryE[0, i] = a.baseData.name; inventoryE[1, i] = a.enchant; inventoryE[2, i] = a.player; inventoryE[3, i] = a.ability1; inventoryE[4, i] = a.ability2;
public List inventoryEList<br />public int[,] inventoryE=new int[6,2000];<br />public class Equipment{ public EquipmentList baseData; public int enchant; public int player; public int ability1; public int ability2; public int ability3;}
for (int i = 1; i < pd.inventoryECapacity-1; i++) { if (inventoryE[0, i] != 0) { inventoryEList.Add(new Equipment { baseData = equipments[inventoryE[0, i]], enchant = inventoryE[1, i], player = inventoryE[2, i], ability1 = inventoryE[3, i], ability2 = inventoryE[4, i], ability3 = inventoryE[5, i] }); ; }