Unity/복습

Unity GUI 21.04.22. 복습

HappyFrog 2021. 4. 22. 22:35
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.Linq;

public class DataManager
{
    public Dictionary<int, ItemData> dicItemData;

    private static DataManager instance;

    public static DataManager GetInstance()
    {
        if(instance == null)
        {
            instance = new DataManager();
        }
        return instance;
    }

    public void LoadData()
    {
        var ta = Resources.Load<TextAsset>("Datas/item_data");
        var json = ta.text;
        this.dicItemData = JsonConvert.DeserializeObject<ItemData[]>(json).ToDictionary(x => x.id);
    }


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

public class ItemInfo
{
    public int id;
    public int damage;

    public ItemInfo(int id, int damage)
    {

    }
    public ItemInfo Init(int id, int damage)
    {
        return new ItemInfo(id, damage);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemData
{
    public int id;
    public string name;
    public int damage;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.IO;

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        if (!File.Exists("./Assets/Resources/Datas/item_info.json"))
        {
            DataManager.GetInstance().LoadData();
            Debug.Log("its Fine :D");
        }
        
        else if (File.Exists("./Assets/Resources/Datas/item_info.json"))
        {
            InfoManager.GetInstance().LoadInfo();
            Debug.Log("its also Fine :D");
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.Linq;

public class InfoManager 
{
    public List<ItemInfo> listItemInfos;
    public Dictionary<int, ItemInfo> dicItemInfos;

    private static InfoManager instance;

    

    public static InfoManager GetInstance()
    {
        if(instance == null)
        {
            instance = new InfoManager();
        }
        return instance;
    }

    public void LoadInfo()
    {
        var ta = Resources.Load<TextAsset>("Datas/item_info");
        var json = ta.text;
        this.dicItemInfos = JsonConvert.DeserializeObject<ItemInfo[]>(json).ToDictionary(x => x.id);
    }

    public void Save()
    {
        var itemInfo = JsonConvert.SerializeObject(this.listItemInfos);
        Resources.
    }
}

InfoManager에서 어떻게 해야 저장을 시킬지 잘 모르겠다.

그리고 Test가 가장 상위 객체인데 ItemInfo가 있는지 알아보는 FileExists가 당장은 오류가 나진 않았지만 저것도 맞는지는 모르겠다. (C#에선 저렇게 하는데.)

 

++ 검색해보니 GetFiles를 쓰라는 결과도 나오는데 역시 경로를 어떤식으로 적어야 하는지 모르겠다. C#에서는 동일한 계층의 폴더에 존재한다면 (./file_name) 이런식으로도 쓰고 그 하위 폴더면(./folder_name\file_name.json)이런식으로 사용했던 것 같은데 여기서는 \(백슬래시)를 사용하면 바로 에러가 나서 헷갈린다.