【Unity】Addressablesシステムを使ってCSVを1行ずつ読み込みたい

未分類

こんにちは.

タイトル通りなのですが,Addressablesシステムを使ってCSVを1行ずつ読み込もうと思った時に意外と不自由だったので,メモとして残してみました.

やりたいこと

読み込むスクリプトと読み込んだCSVを使うスクリプトで分けようと思ったんですよね.

・外のスクリプトからこんな感じで使いたい(イメージ)

private CSVReader _CsvReader; private string addressCSV = "Assets/...../aaa.csv"; void Hoge(){ List<string[]> csvlist = CsvReader.LoadCSV(addressCSV); }
Code language: C# (cs)

・そして,読み込まれる側のスクリプトはこんな感じ(イメージ)

public void LoadCSV(string addressCSV) { List<string[]> csvDatas = new List<string[]>(); // CSVの中身を入れるリスト; TextAsset _dataFile = null; //Assetのロード Addressables.LoadAssetAsync<TextAsset>(addressCSV).Completed += op => { //ロードに成功 _dataFile = op.Result; StringReader reader = new StringReader(_dataFile.text); // , で分割しつつ一行ずつ読み込み // リストに追加していく while (reader.Peek() != -1) // reader.Peaekが-1になるまで { string line = reader.ReadLine(); // 一行ずつ読み込み csvDatas_ALL.Add(line.Split(',')); // , 区切りでリストに追加 } }; return csvDatas_ALL; }
Code language: C# (cs)

しかし,上記のイメージスクリプトではうまくいかない.

6行めのCSVの処理が完了してしまう前に,20行めの「return」が動いてしまい,nullが返されてしまう.

同期処理を実現する

要はcsvの処理が完了してから,returnの処理ができるようになると良い.

LoadAssetAsyncは非同期処理なので,これを同期処理にできると良い.

と,調べてみると「WaitForCompletion()」という読み込むまで次に進まない関数があるらしい!

この関数はこれからも使うようにしようかしら

//好きなCSVを読み込み配列にして返す関数 public List<string[]> LoadCSV(string addressCSV) { List<string[]> csvDatas_ALL = new List<string[]>(); // CSVの中身を入れるリスト; //Assetのロード TextAsset _dataFile = null; _dataFile = Addressables.LoadAssetAsync<TextAsset>(addressCSV).WaitForCompletion(); StringReader reader = new StringReader(_dataFile.text); //// , で分割しつつ一行ずつ読み込み //// リストに追加していく while (reader.Peek() != -1) // reader.Peaekが-1になるまで { string line = reader.ReadLine(); // 一行ずつ読み込み csvDatas_ALL.Add(line.Split(',')); // , 区切りでリストに追加 } Addressables.Release(_dataFile); return csvDatas_ALL; }
Code language: PHP (php)

コメント

タイトルとURLをコピーしました