2015年1月13日火曜日

【Unity】 CSVとの連携

CSVファイルを使ってフィールドを作成したいと思ったのでCSVファイルとの連携について書きます。今回は読み込みのみ。

まずCSVファイルを用意します。今回は50×50、計2500個のデータを有するCSVファイルを用意しました。

用意したCSVファイルの拡張を.txtに変え、Assets/Resources の中に入れます。Resourcesフォルダがない場合は作ってください。

テキストにするとカンマが入ります。

続いてプログラムはこちら
using UnityEngine;
using System.Collections;

public class CSVReader : MonoBehaviour {
    int _size = 50;
    string[,] _box;

    void Start () 
    {
        _box = new string[_size, _size];

        //テキストファイルの読み込み
        TextAsset _fieldTxt = Resources.Load("CSV/field0", typeof(TextAsset)) as TextAsset;
        //区切り条件指定
        //char[] _kugiri = {'\r','\n'};//改行区切り、二種類
        char[] _kugiri = {'\n'};
        //String配列に格納
        string[] _fieldString = _fieldTxt.text.Split(_kugiri);

        for(int i = 0; i < _size; i++)
        {
            string[] _tempLetter = _fieldString[i].Split(',');

            for(int j=0; j < _size ; j++)
            {
                _box[j, i] = _tempLetter[j];
                Debug.Log (j+":"+i+" ; " + _box[j,i]);
            }
        }
    }
}

再生するとコンソールはこんな感じになります。

ちゃんとCSVファイルからデータを読み込み、stringの配列に格納できていますね。
このままではstring型なのでint.Parseなどでint型に変換してフィールドに落とし込みます。

CSVデータ適用前

適用後


上に書いたプログラムはtempLetter[]なんて使ってるあたり酷いし必ずもっといいやり方があるはずなので探してみてください。というかどなたかやり方教えてください。

//char[] _kugiri = {'\r','\n'};//改行区切り、二種類
がコメントアウトされているのは50×50のデータを1本のストリングで扱おうとした時の名残りです。
'\r' をカンマだと思っていたんですがそもそもそれが間違っていて、カンマを同時に指定する方法がなかなか見つからなかったので逃げに走りました。


以下私的メモ


■ Error CS0101

error CS0101: The namespace `global::' already contains a definition for `GLLine'

同じ名前のスクリプトがあるときに出るエラー。上記エラーの場合、

public class GLLine : MonoBehaviour { ~~ }

これがプロジェクト内に2つあります。
スクリプトをコピーして名前を変え忘れてるとかそんなところだと思います。

0 件のコメント:

コメントを投稿