TIL

2024 12 13 TIL

noc777 2024. 12. 13. 08:39

 

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