에디터에서는 쉽게 원하는 경로에서 Json 파일 등 다양한 파일에 접근할 수 있지만
안드로이드, iOS와 같은 디바이스에서는 여러 제약조건으로 인해 불가능하다.
따라서 환경에 맞게 경로 설정을 하여 Json 파일을 불러와야 한다.
slotData = LoadJsonFile<SlotData>("Data/SlotData.json");
private T LoadJsonFile<T>(string fileName)
{
string filePath;
#if UNITY_EDITOR || UNITY_STANDALONE
filePath = Path.Combine(Application.streamingAssetsPath, fileName);
#elif UNITY_ANDROID
filePath = Path.Combine("jar:file://" + Application.dataPath + "!/assets/", fileName);
#elif UNITY_IOS
filePath = Path.Combine(Application.streamingAssetsPath, fileName);
#else
filePath = null;
#endif
string jsonData;
#if UNITY_ANDROID && !UNITY_EDITOR
if (filePath.StartsWith("jar:"))
{
UnityWebRequest www = UnityWebRequest.Get(filePath);
www.SendWebRequest();
while (!www.isDone) { }
jsonData = www.downloadHandler.text;
}
else
{
jsonData = File.ReadAllText(filePath);
}
#else
jsonData = File.ReadAllText(filePath);
#endif
return JsonConvert.DeserializeObject<T>(jsonData);
}
사용 방법은 Assets/StreamingAssets 폴더 하위에 불러오기를 원하는 Json 파일을 넣고
해당 경로를 인자로 사용해서 함수를 실행하면 된다.
주위할점은 Resources와 달리 뒤에 파일 확장자 추가가 필요하다.
이를 통해 에디터 AOS, iOS 모두 파일 경로 및 접근 권한으로 고생할 필요 없이
Json 파일을 불러올 수 있게 되었다.
반응형
'가이드 > Unity, C#' 카테고리의 다른 글
[Unity/C#] 투명 Mask 설정하는 방법 (0) | 2023.07.25 |
---|---|
[Unity/C#] Scene couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded. 에러 (0) | 2023.05.14 |
[Unity/C#] ngui Input Field Validation 옵션 (2) | 2023.03.18 |
[Unity/C#] position과 localPosition의 차이 (0) | 2023.03.12 |
[Unity/C#] Private 변수 에디터에서 보이게 하는 법 - SerializeField (0) | 2023.02.27 |
댓글