Unityでcsvファイルの読み込みをする
csvファイルを読み込むクラス
csvファイルはコンマで要素を区切ったファイルだから、コンマ区切りで
2次元配列に要素を格納していく。
そこでCSVReader君をお呼びした。
私の制作中の音ゲーのスクリプトの一部をチラ見せ。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; public class CSVReader : MonoBehaviour { public List<string[]> csvDatas = new List<string[]>(); public void CsvRead (string musicName) { // csvをロード TextAsset csv = Resources.Load (musicName) as TextAsset; StringReader reader = new StringReader (csv.text); while (reader.Peek () > -1) { // ','ごとに区切って配列へ格納 string line = reader.ReadLine (); csvDatas.Add (line.Split (',')); } } }
CsvRead関数に曲名を引数として持たせ、曲名のファイルを読み込ませている。
読み込む場所はResources/下だけど、
TextAsset csv = Resources.Load ("abc/" + musicName) as TextAsset;
とするとResources/abc/下で曲名のファイルを探してくれる。
読み込んでみる
ここで、さらにゲームの流れを管理しているGameManagerさんを用意する。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { public string musicName; // 曲名 private CSVReader musicData = new CSVReader (); // 譜面データ void Start() { musicData.CsvRead(musicName); } }
これをGameManegerと名付けたオブジェクトにアタッチしよう。
今回用意したテスト用のtest.csvはこんな感じ。
1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16
忘れずInspector上から曲名を仮入力して、シーンを再生すると~。
_人人人人人人人人人_
> 何も起こらない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
そりゃそうだよ読み込んでるだけだからね。
読み込めてるか確認しよう
Debug.Logさんの出番だよ~
っということでDebug.Logで読み込めてるか確かめてみよう。
void Start() { musicData.CsvRead(musicName); for (int i = 0; i < musicData.csvDatas.Count; i++) { for (int j = 0; j < musicData.csvDatas[i].Length; j++) { Debug.Log("csvDatas[" + i + "][" + j + "] = " + musicData.csvDatas[i][j]); } } }
適当にforを回してみる。
読み込めてるぞ~。