DataManager의 기능은 게임의 전반적인 데이터를 관리하는 역할을 한다면 게임시작시 리소스에 있는 외부데이터(스크립터블 오브젝트, Json)을 불러와서 관리를 해주는 역할이 되어야할 것 같습니다.
해당 기능은 게임의 저장기능이있다면 사용되겠지만 리소스를 불러오는 것에는 적합하지 않았습니다.
public void Save<T>(DataType type, T file)
{
string fileData = JsonUtility.ToJson(file, true);
string path = Path.Combine(Application.persistentDataPath + $"/JsonData/{type}", $"{typeof(T).Name}.json");
File.WriteAllText(path, fileData);
}
public T Load<T>(DataType type)
{
string path = Path.Combine(Application.persistentDataPath + $"/JsonData/{type}", $"{typeof(T).Name}.json");
string jsonData = File.ReadAllText(path);
T obj = JsonUtility.FromJson<T>(jsonData);
return obj;
}
현재 문제점 데이터를 받아와서 나눠주는 것을 테스트해보던 중 ItemData 를 받는 곳에서만 null이 반환되는 오류 발생
현재 딕셔너리에 있는 객체를 ItemData 를 형변환 하지못해서 null이 발생하는 것은 아닌 것으로 보임
맨아래의 디버그 코드가 찍히는 것으로 봐선 조건문조차 들어가지못함.
if(typeof(PlayerData).IsAssignableFrom(typeof(T)))
{
if (playerDatas.TryGetValue(key, out PlayerData playerData))
return playerData as T;
}
else if(typeof(GhostData).IsAssignableFrom(typeof(T)))
{
if (ghostDatas.TryGetValue(key, out GhostData ghostData))
return ghostData as T;
}
else if (typeof(ItemData).IsAssignableFrom(typeof(T)))
{
if (itemDatas.TryGetValue(key, out ItemData itemData))
return itemData as T;
}
Debug.Log("해당하는 값을 찾지 못했습니다.");
return null;
조건문으로 IsAssignableFrom 이라는 메서드를 사용하였는데
이 메서드는 제네릭으로 받아온 T가 ItemData 타입이거나 상속받는 타입인지를 확인하는 메서드인데
여기서는 문제가 없어보인다.
그렇다면 tryGetValue를 하였을 때가 문제인건가?
마찬가지로 문제가 ItemData를 활용한 값이기에 이것도 문제가 없어보인다.
아직 뭐가 문제인지 잘 모르겠으니 내일 일어났을 때 다시 확인해보도록하자.
'TIL' 카테고리의 다른 글
2024 12 16 TIL (0) | 2024.12.16 |
---|---|
2024 12 15 TIL (0) | 2024.12.15 |
2024 12 12 TIL (1) | 2024.12.12 |
2024 12 11 TIL (0) | 2024.12.11 |
2024 12 10 TIL (0) | 2024.12.10 |