はこねのはこ

はこねさんの備忘録

UnityでCVSファイルの読み出して2次元配列に格納しました。

はじめに

かくかくしかじかで、Unityでクイズゲーム作りたいと思いました。

しかし、問題を編集するのはUnityを使わない人なので、 スクリプトに埋め込むわけにはいきませんでした。

また、追加や編集が気軽にできるように、 外部ファイルに記載して、それを読み込む形をとります。

そんな感じでCSVファイルを読み込みます。

その時のメモです。

環境

  • Windows10
  • Unity 2018.1.0f2

やりたいこと

CSVファイルを作成し、それをUnityで読み込み、consoleに表示する。

結論

できました。 f:id:hakonebox:20180517005127p:plain

実際に使用したファイル

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

表示の仕方

f:id:hakonebox:20180517004745p:plain

  1. 作成したスクリプトをGameObjectにアタッチ
  2. Data Nameに問題テーマを記述
  3. csvファイルの名前をtheme_[問題テーマ]にする
  4. Assetsフォルダに、Resources->CSVフォルダを作成
  5. CSVフォルダに読み出すcsvファイルを入れる

将来の自分へ

csvファイルに日本語を使用する場合には文字コードに気を付けること。

UnityのCreate->C# Scriptで作成されるスクリプト文字コードutf-8のようです。

csvファイルもutf-8にしておかないと、エラーが出てしまいます。

おわりに

書き込みは調べてないのでできません。 必要になったら調べる方向で。

とりあえず外部ファイルが読めるようになったので、 使える知識が一つ増えてよかったです。

あと、今回はあくまでエディタ上の読み込みなので、 ビルドしてスタンドアロン状態ではまだ未検証。

参考にさせていただきました

qiita.com