본문 바로가기

Unity/Problems

2020-05-18 유니티 파일 입출력...

DataManager

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.Linq;
 
public class DataManager 
{
    static DataManager instance;
 
    private Dictionary<int, MissionData> dicMissionData;
 
    
    private DataManager()
    {
        this.dicMissionData = new Dictionary<int, MissionData>();
    }
 
    public static DataManager GetInstance()
    {
        if (DataManager.instance == null)
        {
            instance = new DataManager();
        }
        return DataManager.instance;
    }
 
    public void LoadData()
    {
        TextAsset textAsset = Resources.Load("Json/mission_data"as TextAsset;
        string json = textAsset.text;
 
        this.dicMissionData = JsonConvert.DeserializeObject<MissionData[]>(json).ToDictionary(x=>x.id, x=>x);
    }
 
    public MissionData GetMissionDataById(int id)
    {
        return this.dicMissionData[id];
    }
 
    public Dictionary<int, MissionData> GetDicMissionData()
    {
        return this.dicMissionData;
    }
}
 
 
 

 

Test.Class

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
 
public class Test : MonoBehaviour
{
    private string GamaDataFileName = "/mission_info.json";
    public Dictionary<int, MissionInfo> dicMissionInfo;
    private void Awake()
    {
   
    }
    private void Start()
    {
        string filePath = Application.persistentDataPath + GamaDataFileName;
        this.dicMissionInfo = new Dictionary<int, MissionInfo>();
 
        Debug.Log(filePath);
 
        if (File.Exists(filePath))
        {
            Debug.Log("불러오기 성공!");
            string FromJsonData = File.ReadAllText(filePath);
            this.dicMissionInfo = JsonConvert.DeserializeObject<MissionInfo[]>(FromJsonData).ToDictionary(x => x.id, x => x);
        }
        else
        {
            Debug.Log("새로운 파일 생성");
            
 
            DataManager.GetInstance().LoadData();
            var MissionData = DataManager.GetInstance().GetDicMissionData();
 
            foreach (var pair in MissionData)
            {
                var info = new MissionInfo(pair.Key,0);
                this.dicMissionInfo.Add(info.id, info);
            }
 
            //int length = this.dicMissionInfo.Count;
            //MissionInfo[] arrInfo = new MissionInfo[length];
            //int inx = 0;
            //foreach (var pair in this.dicMissionInfo)
            //{
            //    arrInfo[inx++] = pair.Value;
            //}
 
            string ToJsonData = JsonConvert.SerializeObject(this.dicMissionInfo);
 
            File.WriteAllText(filePath, ToJsonData);
            
            Debug.Log("저장완료");
        }
    }
}
 
 
 

출력값

첫번째.

 

Application.persistentDataPath API를 쓰면 경로가

 

C:\Users\tjoeun\AppData\LocalLow\DefaultCompany\Study_007 

 

이것인걸 모르고 삽질...

 

두번째.

 

JsonConvert.SerializeObject API 안쓰고, JsonUitlity.ToJson을 써놓아서,

 

총 1시간 반동안 삽질..

 

 JsonUitlity.ToJson -> 찾아보자