System - DataManager

최강산·2023년 8월 18일
0

클래스 설명

Class DataManager

  • 현재 씬에 필요한 데이터들을 로드하고 관리하는 역할
  • 데이터는 구글 스프레드시트로 데이터테이블 형식으로 관리했다.






로직 설명

LoadSceneData :: 씬 데이터 호출

public void LoadSceneData(Define.Scene _scene)
{
    ClearSceneData();
    Managers.Resource.Load<TextAsset>(_scene.ToString(),(sceneDataJson) => 
    {
        SceneData sceneData = JsonUtility.FromJson<SceneData>(sceneDataJson.text);
        foreach (var dialog in sceneData.dialogDatas)
        {
            sceneDialogData.TryAdd(dialog.dialogUID, dialog);
        }
    });
}
  • 매개변수로 받은 Scene enum값을 스트링값으로 변환

  • 변환한 값으로 Managers.Resource.Load() 실행

  • 콜백받은 SceneDataJson을 SceneData 클래스로 변환

  • SceneData 클래스에 있는 데이터들을 딕셔너리에 추가






PreDataLoad :: 기본 데이터 호출

public void PreDataLoad()
{
    if (isPreload)
        return;

    isPreload = true;

    Managers.Resource.Load<TextAsset>("Preload", (preDataJson) =>
    {
        PreData preData = JsonUtility.FromJson<PreData>(preDataJson.text);
        foreach (var item in preData.itemDatas)
        {
            itemDataDictionary.TryAdd(item.itemUID, item);
        }
    });
}
  • 이미 로드 되어 있다면 리턴

  • 아니라면 Managers.Resource.Load() 실행

  • 콜백받은 PreDataJson을 PreData 클래스로 변환

  • PreData 클래스에 있는 데이터들을 딕셔너리에 추가






ClearSceneData :: 씬이 바뀔 때 초기화 용도

public void ClearSceneData()
{
    sceneDialogData.Clear();
}
  • SceneData 삭제






Get :: 데이터 반환 용도

public void GetItem(int _itemUID, Action<ItemData> _callback)
{
    if (itemDataDictionary.TryGetValue(_itemUID, out ItemData itemData))
        _callback?.Invoke(itemData);
}

public void GetDialog(int _dialogUID, Action<DialogData> _callback)
{
    if (sceneDialogData.TryGetValue(_dialogUID, out DialogData dialogData))
        _callback?.Invoke(dialogData);
}
  • 매개변수로 받은 UID에 맞는 데이터를 딕셔너리에서 찾은 후 있으면 반환
profile
나 왜 아직도 초보 개발자?

0개의 댓글

관련 채용 정보