Excel -> json으로 변환하기
현업을 가면 기획자들과 같이 일하게 될 것이고, 기획자들이 유니티를 만지며 so데이터를 수정하는 것은 번거로울 거다. 그래서 Excel에 데이터를 입력하고 이를 json으로 변환시켜 이를 사용해보도록 하자.
변환하는데에 많은 방법들이 있는 것으로 알지만 오늘은 구글 시트에 확장프로그램을 이용하여 json으로 변환해보겠다.
먼저 구글 시트를 생성해주고 필요한 데이터들을 입력해준다.
Export Sheet Data라는 확장프로그램을 설치해준다.
설치하면 오픈 사이드바를 열어 Force string values,Export cell arrays,Export sheet arrays,Export value arrays 모두 체크해주고 export를 누르면 json파일로 변환이 완료된다.
이제 유니티로 돌아가 json을 불러오는 코드를 작성해보자.
json파일 데이터 불러오기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DataManager : MonoBehaviour
{
public TextAsset data;
private AllData datas;
[SerializeField] private GameObject puzzlePrefab;
[SerializeField] private Transform env;
private void Awake()
{
datas = JsonUtility.FromJson<AllData>(data.text);
}
private void Start()
{
int x = datas.stage[0].x;
int y = datas.stage[0].y;
for(int i = 0; i < x; i++)
{
for(int j = 0; j < y; j++)
{
var obj = Instantiate(puzzlePrefab, env);
obj.transform.position = new Vector3(i,0,j);
}
}
}
}
[System.Serializable]
public class AllData
{
public MapData[] stage;
}
[System.Serializable]
public class MapData
{
public int stageID;
public string stageName;
public int puzzleID;
public int x;
public int y;
}
위 코드처럼 먼저 MapData에 Excel에 적어놓았던 요소들을 그래도 변수로 만들어준다.
그리고 스테이지로 구현할 예정이니 이를 스테이지라는 배열로 만들어준다.
이제 아까 만들어진 json파일을 받기위해 TextAsset에 json파일을 넣어주고, jsonutility.fromjson으로 제네릭 형식에 맞춰 AllData형식으로 넣어준다.
그리고 excel에서 설계한대로 x로 몇개, y로 몇 개 를 불러오기 위해, alldata안에 x,y를 지역변수 x로y로 가져와 준다. 마지막으로 생성할 프리팹을 넣어주고, parnet어디에 넣어줄지 정해주고, 위치는 간단히 1씩 늘어나게 i,j를 넣어주면 완료이다.
일단 간단하게는 구현이 되지만 프로젝트에 어떻게 활용해볼지 고민이 된다.
각 스테이지 별로 맵이 있고, 퍼즐요소가 각 맵마다 조금씩 다르게 배치되어 다양한 퍼즐문제를 풀며, 적도 매 스테이지 다른 위치에? 적절한 위치에 생성되도록 설계하려고 한다.