UnityでCVSファイルの読み出して2次元配列に格納しました。
はじめに
かくかくしかじかで、Unityでクイズゲーム作りたいと思いました。
しかし、問題を編集するのはUnityを使わない人なので、 スクリプトに埋め込むわけにはいきませんでした。
また、追加や編集が気軽にできるように、 外部ファイルに記載して、それを読み込む形をとります。
そんな感じでCSVファイルを読み込みます。
その時のメモです。
環境
- Windows10
- Unity 2018.1.0f2
やりたいこと
CSVファイルを作成し、それをUnityで読み込み、consoleに表示する。
結論
できました。
実際に使用したファイル
script
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; public class GameMaster : MonoBehaviour { public string dataName; // 問題テーマ private string title; // タイトル private TextAsset csvFile; // CSVファイル private List<string[]> csvDatas = new List<string[]>(); // CSVの中身を入れるリスト private int height = 0; // CSVの行数 private int i,j=0;//debugループカウンタ const int size= 7; void Start() { title = "theme_"; // 頭文字 csvFile = Resources.Load("CSV/" + title + dataName) as TextAsset; /* Resouces/CSV下のCSV読み込み */ StringReader reader = new StringReader(csvFile.text); while (reader.Peek() > -1) { string line = reader.ReadLine(); csvDatas.Add(line.Split(',')); // リストに入れる Debug.Log("reading:" + height); height++; // 行数加算 } for (i = 0; i < height; i++) { for (j = 0; j < size; j++) { Debug.Log("csvDatas["+ i +"]["+ j +"]:" + csvDatas[i][j]); } } } }
csvファイル
1,マイコンの問題その1,選択肢1,選択肢2,選択肢3,選択肢4,答え5 2,マイコンの問題その2,選択肢A,選択肢B,選択肢C,選択肢D,答えE
表示の仕方
- 作成したスクリプトをGameObjectにアタッチ
- Data Nameに問題テーマを記述
- csvファイルの名前をtheme_[問題テーマ]にする
- Assetsフォルダに、Resources->CSVフォルダを作成
- CSVフォルダに読み出すcsvファイルを入れる
将来の自分へ
UnityからCSVの半角英数は読めるけど、日本語全角は読めないって問題に当たって、すっごく悩んでたんですが、もしやとおもってcsvの文字コードをutf-8で日本語入力したら読み出せた。
— はこね (@hakone_san) 2018年5月16日
文字コードってutf-8にしなきゃいけないのかな。指定できるのかな。
ともかく解決してよかった。
csvファイルに日本語を使用する場合には文字コードに気を付けること。
UnityのCreate->C# Scriptで作成されるスクリプトの文字コードはutf-8のようです。
csvファイルもutf-8にしておかないと、エラーが出てしまいます。
おわりに
書き込みは調べてないのでできません。 必要になったら調べる方向で。
とりあえず外部ファイルが読めるようになったので、 使える知識が一つ増えてよかったです。
あと、今回はあくまでエディタ上の読み込みなので、 ビルドしてスタンドアロン状態ではまだ未検証。