코딩하기 좋은날
안드로이드에서 StreamingAssets 폴더에 있는 파일 읽기 및 Json 파싱 본문
반응형
안드로이드에서 Json 파일을 읽어서 사용을 해야 하는데 생각보다 까다로워서 정리겸 글을 쓰려고 합니다.
코드는 아래와 같습니다. Application.streamingAssetsPath, 파일이름 으로 파일에 접근 할 수 있고
파일은 Assets 하위에 StreamingAssets 폴더를 만들고 거기에 넣어두면 됩니다.
파일에 접근한뒤 WWW를 통해서 string 으로 읽어 들이면 됩니다.
Json 파일 파싱의 경우 상단에 Serializable을 해준 클래스를 하나 만들어야 합니다. 이때 변수 이름을 key 값과 동일하게 하고 저는 Json 에서 배열을 사용하였으므로 List로 선언하였습니다.
파일을 읽어들인 string을 JsonUtility.FromJson<Data>(str) 을 통해서 해당 객체로 변환할 수 있습니다.
이후 각 변수에 접근하여 사용을 하면 됩니다.
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System;
using UnityEngine;
[Serializable]
public class Data
{
public List<string> num = new List<string>();
}
public class JsonTest : MonoBehaviour
{
public string stage;
ansslime instance;
// Start is called before the first frame update
void Start()
{
instance = GameObject.Find("slime").GetComponent<ansslime>();
if (Application.platform == RuntimePlatform.Android)
{
string oriPath = Path.Combine(Application.streamingAssetsPath, stage + ".json");
WWW reader = new WWW(oriPath);
while(!reader.isDone)
{
}
string str = reader.text;
Data data2 = JsonUtility.FromJson<Data>(str);
for (int i = 0; i < data2.num.Count; i++)
{
int first = int.Parse(data2.num[i][0].ToString());
int second = int.Parse(data2.num[i][1].ToString());
instance.myList.Add(new KeyValuePair<int, int>(first, second));
}
}
else
{
string str = File.ReadAllText(Application.dataPath + "/Resources/" + stage + ".json");
Data data2 = JsonUtility.FromJson<Data>(str);
for (int i = 0; i < data2.num.Count; i++)
{
int first = int.Parse(data2.num[i][0].ToString());
int second = int.Parse(data2.num[i][1].ToString());
instance.myList.Add(new KeyValuePair<int, int>(first, second));
}
}
}
// Update is called once per frame
void Update()
{
}
}
반응형
'Unity' 카테고리의 다른 글
유니티를 이용한 2D 모바일 게임 만들기 (두번째) (0) | 2020.03.19 |
---|---|
Unity를 이용한 2D 모바일 게임 만들기 - 2 (0) | 2020.02.19 |
Unity를 이용한 2D 모바일 게임 만들기 - 1 (0) | 2020.02.17 |