ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 13주차 - 맵 데이터 세이브, 및 로드
    Unity/Unity 스파르타 2024. 3. 11. 20:21
    728x90

     

    1. 맵 데이터를 리소스폴더에 Json 파일로 저장하기

    2. 저장한 데이터 불러오기

    3. 맵 에디터에서 새로 만든 맵인지, 불러온 맵인지에 따라 저장 로직을 다르게 만들기


    1. 맵 데이터를 리소스폴더에 Json 파일로 저장하기

     

    파일 저장할 경로 구하기

    Application.dataPath 를 사용해 현재 실행된 프로젝트의 Asset 폴더의 절대경로를 알 수 있습니다.

     folderPath = Path.Combine(Application.dataPath, "Resources/MapDat");

     

    맵에 데이터를 Json 파일로 변환해 저장합니다.

        void CreateJsonFile()
        {
            Map map = new Map(mapID, mapTileDataList, playerSpawnPosition, playerExitPosition, new Vector2(width, height));
            string json = JsonUtility.ToJson(map);
            string filePath = Path.Combine(folderPath, $"{map.mapID}.json");
            File.WriteAllText(filePath, json);
    
            UnityEditor.AssetDatabase.Refresh();
        }

    UnityEditor.AssetDatabase.Refresh();

    리프레쉬는 유니티에서 변경된 파일을 감지해 에셋 데이터베이스를 업데이트 해주는 함수입니다. 써주지 않으면 런타임 환경에서 사용할 수가  없습니다.

     

      public void LoadJsonFile()
      {
          foreach(TextAsset json in Resources.LoadAll<TextAsset>("MapDat"))
          {
              Map map = JsonUtility.FromJson<Map>(json.text);
              mapDictionary.Add(map.mapID, map);
              Debug.Log(map.mapID);
          }
      }

     

    리소스폴더의 로드해올 경로에 있는 파일을 모두 가져와 딕셔너리에 넣어줍니다.

     

    새로운 맵을 만들때 저장 경로에 똑같은 이름이 있으면 자동으로 뒤에 숫자를 붙여 데이터를 저장해줍니다

     if(mapEditorType == MapEditorType.New ){
         string path = Path.Combine(folderPath, $"{mapID}.json");
         bool fileExists = File.Exists(path);
         while (fileExists)
         {
             int num = 1;
             path = Path.Combine(folderPath, $"{mapID}{num}.json");
             if (!File.Exists(path))
             {
                 mapID = $"{mapID}{num}";
                 fileExists = false;
             }
    
             num++;
         }
    728x90
Designed by Tistory.