본문 바로가기
유니티 최고/유니티 기초

유니티(Unity) Json파일 불러와 사용해보기 (모바일)

by Lee_story_.. 2023. 5. 10.
728x90

이번엔 데이터 베이스를 이용하기 전에 간단한 json파일들을 이용하여

데이터를 활용하는 방법에 대해 알아보도록 하겠습니다

 

 

먼저 json파일을 사용하기위한 순서를 생각해보면

 

1. json파일 불러오기

2. json파일 읽기/저장

3. 데이터 사용 

 

이런식으로 구성될 것 같습니다. 

 

 


그럼 1!  파일을 불러와야합니다. 

 

지난글에서 말했듯이 에디터상에서는  C:\~~~~\~~~~\~~~~\~~~~\UnityBlog 로 경로를 지정하여 불러올 수 있지만..

 

빌드시에는 경로가 변경되기에! 이 점을 생각하여 링크를 구성해 주어야합니다. 

 

 

 

그럼 json파일을 어디 저장을 해놔야 하나!! 하신다면

아래글의 resources폴더와 streamingAssets폴더부분을 읽어보시면 될 것 같습니다. 

 

 

유니티(Unity) 특수 폴더 & 저장 경로 읽어오기

유니티에서 파일을 읽어오기위해서 많은 방법들이 있습니다. 그 중 최근에 라는 함수를 사용하여 json파일을 불러오며 유니티에 다양한 특수폴더들과 위치접근 방법들이 있는것을 알게되어 정

ljhyunstory.tistory.com

 

그럼이제 2가지 경우를 생각해 저장해 보겠습니다. 

1. 만약 resources폴더에 저장을 한다?? 

이 경우에는 라이브러리가 있습니다....

TextAsset textAsset = Resources.Load<TextAsset>("Json/SchoolLocationJson");
//TextAsset textAsset = Resources.Load<TextAsset>("Resources하위폴더부터 json파일까지, 확장자 제외");

 

위 코드처럼 바로 json파일을 TextAsset으로 불러올 수 있습니다.

 

 

2. 만약 streamingAssets폴더에 저장을 한다면?

이 경우에는 약간 복잡해지지만 그렇게 막 다르진 않습니다.  

WWW를 이용하는 방법인데 www는 원래 웹 정보를 얻어오는 기능으로 사용되지만 여기서도 사용할 수 있다고 합니다. 

private static string JsonFilelocation = Application.streamingAssetsPath + "/ChatSet.json";

...

WWW reader = new WWW(SchoolLocationPath);

 

 

만약 컴퓨터.. . 라면..

더보기

 

경로는

Application.persistentDataPath를 통해 얻어 오거나 직접 입력해서 받아 올 수 있습니다...

 string temp = File.ReadAllText(SchoolLocationPath);
StreamReader stream = new StreamReader(temp);

string data = stream.ReadToEnd();
LocationNumbers LocationList = JsonUtility.FromJson<LocationNumbers>(data); //Json data 변환
stream.Close(); // 사용 후에는 꼭 닫아준다.

 

이부분은 좀더 알아봐야 해서 추후에 추가 하도록 하겠습니다.

 

 

 


json을 불러 왔으니  2. 데이터를 변환 해보겠습니다 .

 

Json을 관리 , 수정 할 수 있는 함수가 이미 만들어져 있기에 사용하면 매우매우 쉽게 구현 가능합니다!

 

바로 JsonUtility 라이브러리의 FromJson 함수입니다!

 

기본적인 데이터 형식은 아래와 같이 진행 하겠습니다!

 

데이터 변환시에는 JsonUtility.FromJson 함수를 사용하기에 바로 사용하면 될 것 같지만!

이를 사용하기 전에 사전 작업이 필요합니다 .

 

위와 같은 json파일이 있으면 이를 속성별로 정리를 해 주어야 하기에 json을 받아줄 클래스를 선언해 주어야합니다. 

 

만약 json파일 내부에 

 

 

아래처럼 하나의 정보로 구성이 되어있다....

{
      "Role": 0,
      "Message": "안녕!"
    }

 

그럼 아래처럼 구성해주고 

public class Location
        {
            public int Role;
            public string  Message;

        }

 

아래처럼 받아올 수 있습니다.

Location LocationList = JsonUtility.FromJson<Location>(textAsset.text);

 

 

하지만 대부분이 여러개의 정보를 하나의 json으로 받아오므로 이중 구조를 만들어 주어야합니다 .

 

아래처럼 클래스를 배열로 둘러싸는 형식으로 만들어 줍시다.

 public class Location
        {
            public int num;
            public double latitude;
            public double longitude;
            public string name;

        }

public class LocationNumbers
{
    public Location[] Body;
}

 

이후 아래처럼 받아오면 끝!

LocationNumbers LocationList = JsonUtility.FromJson<LocationNumbers>(textAsset.text);

 

 

 

 


이제 3. 데이터 접근방법에 대해서 알아보겠습니다. 

 

 

위에서 데이터를 받게되면 아래와 같은 foreach문을 통해 접근 할 수 있습니다. 

foreach (Location lt in LocationList2.Body)
{
    print(lt.name + " : " + lt.num);
}

 

끝...?

 

 

 


마지막으로 json파일을 생성하고 싶다면..

 JsonUtility.ToJson 함수를 사용할수 있습니다. 

Location data = new Location();
data.num = 12;
data.name = "오늘도 열심히";

File.WriteAllText(Application.dataPath + "/TestJson.json", JsonUtility.ToJson(data3));

 

 

부족한 부분도 있는것 같네요.. 추가할 부분이 생기면 다시 추가하도록 하겠습니다!

 

 

 

 

틀린점이 있다면 댓 달아주세요!

 

 

댓글