JSON Loader 리스트 형태 파싱 할 수있도록 코드 수정
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -9,19 +10,47 @@ namespace TON
|
|||||||
{
|
{
|
||||||
private const string DATA_PATH = "GameData/";
|
private const string DATA_PATH = "GameData/";
|
||||||
|
|
||||||
|
// 제네릭 리스트를 감싸기 위한 래퍼 클래스
|
||||||
|
[Serializable]
|
||||||
|
private class Wrapper<T>
|
||||||
|
{
|
||||||
|
public List<T> items;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Resources 폴더에서 JSON 파일을 읽어 특정 데이터 타입으로 변환하는 함수 </summary>
|
/// <summary> Resources 폴더에서 JSON 파일을 읽어 특정 데이터 타입으로 변환하는 함수 </summary>
|
||||||
public static T LoadFromResources<T>(string fileName)
|
public static T LoadFromResources<T>(string fileName)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (fileName.EndsWith(".json"))
|
||||||
|
{
|
||||||
|
fileName = fileName.Replace(".json", ""); // 확장자 제거
|
||||||
|
}
|
||||||
|
|
||||||
string path = DATA_PATH + $"{fileName}";
|
string path = DATA_PATH + $"{fileName}";
|
||||||
TextAsset jsonFile = Resources.Load<TextAsset>(path);
|
TextAsset jsonFile = Resources.Load<TextAsset>(path);
|
||||||
|
|
||||||
if (jsonFile != null)
|
if (jsonFile != null)
|
||||||
{
|
{
|
||||||
return JsonUtility.FromJson<T>(jsonFile.text);
|
string jsonText = jsonFile.text;
|
||||||
|
|
||||||
|
// T가 List<> 형태인지 검사
|
||||||
|
if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(List<>))
|
||||||
|
{
|
||||||
|
// JSON을 감싸는 래퍼 추가하여 변환
|
||||||
|
string wrappedJson = "{\"items\":" + jsonText + "}";
|
||||||
|
Type itemType = typeof(T).GetGenericArguments()[0]; // 리스트의 요소 타입 가져오기
|
||||||
|
Type wrapperType = typeof(Wrapper<>).MakeGenericType(itemType); // Wrapper<T> 생성
|
||||||
|
object wrapperInstance = JsonUtility.FromJson(wrappedJson, wrapperType); // 변환 실행
|
||||||
|
return (T)wrapperType.GetField("items").GetValue(wrapperInstance); // 리스트 추출
|
||||||
|
}
|
||||||
|
|
||||||
|
// 일반 객체 변환
|
||||||
|
return JsonUtility.FromJson<T>(jsonText);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.LogError($"JSON 파일을 찾을 수 없습니다: {fileName}");
|
Debug.LogError($"JSON 파일을 찾을 수 없습니다: {path}");
|
||||||
return default; // 기본값 반환
|
return default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user