본문 바로가기

Unity

유니티 (Unity) - 파일 데이터 비동기 방식으로 읽어 오기

반응형

 

유니티에서 게임의 설정을 Json 파일로 저장해 사용한다면 게임을 실행할 때마다 저장된 Json파일을

가져와 게임의 설정 값에 대입시켜 주면 될 것입니다.

문제는 JsonData.json 파일을 읽어 오는 도중에 게임 설정 값을 적용하는 코드로 넘어가 버리니 Null 에러가

발생하게 됩니다.

비동기 방식으로 JsonData.json 파일을 가져온 후 완료되었다면 게임 설정 값에 적용하는 방식을 알아보겠습니다.

 

[System.Serializable]
public class GameData {
    public int playerLevel;
    public int playerCurrntHp;
    public float playerPower;
}

우선 JsonData.json으로 변환될 간단한 GameData 모델이 있습니다.

 

using System.Threading.Tasks;

public class DataManager : MonoBehaviour {
    public async void LoadData() {
        GameData gameData = new GameData();
        
        var result = await Task.Run<GameData>(() => {
            string loadDataFile = 게임 데이터 불러오기;
            gameData = loadDataFile을 Json으로 변환;
            return gameData;
        });
        
        if (result != null) {
            불러온 Json 파일 게임 데이터에 적용;
        }
    }
}

 

비동기 Task 사용을 위해 using System.Threading.Tasks; 가 필요합니다.

 

LoadData() 앞에 async를 붙여 비동기 방식임을 선언합니다.

var result = await Task.Run<GameData>() await Task.Run 비동기 방식으로 실행될 코드를 처리하는 곳입니다.

<GameData> => result에 비동기로 넘겨줄 데이터가 GameData방식임을 선언해 줍니다.

읽어올 파일이 단순 Text라면 await Task.Run(() => {}) 이렇게 사용하시면 됩니다.

이후 게임 데이터를 읽고 Json파일로 변환하는 과정을 거친 후 

return gameData; => result에 gameData를 넘겨줍니다.

다시 한번.. 위에서 Task.Run <GameData>로 선언했기에 result는 GameData 모델의 구조를 가집니다.

 

if (result != null) => json 데이터 파일을 가져왔다면 읽어온 게임 데이터를 적용시켜 주시면 됩니다.

 

이상 비동기 방식으로 데이터 불러오기였습니다.

반응형