ぐうたら備忘録

趣味で作ったものなどをぼちぼち書いていきます。

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上から曲名を仮入力して、シーンを再生すると~。f:id:gootalife:20170627124310p:plain

_人人人人人人人人人_
> 何も起こらない <
 ̄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を回してみる。
f:id:gootalife:20170627124315p:plain
読み込めてるぞ~。

最後に

これでcsvファイルを2次元配列に格納する仕組みができた。
これを応用して音ゲーの譜面情報として使っていく。

次はシーンの読み込みについて書こうかな?