Unity

UnityでCSVファイルを読み込んでマップ作製

前回までで二つのオブジェクトをマップに配置できました。
今回はCSVファイルにマップデータを保存して
Unityで読み込んでオブジェクトを配置したいと思います。


このような10×10マスのマップデータを
CSV形式で保存しました。

0は何も配置しない場所。
1は木を配置する場所。
2は石を地面に配置する場所。
3は石を空中に浮かせて屋根のように配置します。
99は二桁の文字列も読み込めるかのテストです。

このマップのイメージとしては
木に囲まれた石の遺跡みたいな感じです。


上記CSVファイルをAssetsのResourcesフォルダに
ぶち込んでおきます。

まずこのCSVファイルをUnityで読み込みます。

//--------------------------------------------------------------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class MapMaker : MonoBehaviour {

    //private TextAsset csvFile; // CSVファイル
    public TextAsset csvFile; // CSVファイル

    string str = "";

    // Use this for initialization
    void Start () {

        csvFile = Resources.Load("testmap1") as TextAsset;
        StringReader reader = new StringReader(csvFile.text);

        while (reader.Peek() > -1)
        {
            string line = reader.ReadLine();
            str = str + line;
        }

	Debug.Log("test2: " + str);

    }	
	// Update is called once per frame
	void Update () {
		
	}
}
//--------------------------------------------------------------

今回からソースコードを表示するプラグイン
Crayon Syntax Highlighter
を導入しました! \(^o^)/
少しは見やすくなったかな?

--------------------------------------------------------

*2019/1/21追記

wordpressがアホみたいな仕様にアップデートされて

Crayon Syntax Highlighterが使えないみたい。;-;

---------------------------------------------------------

上のコードはカンマ区切りの文字列を
strという文字列型変数に読み込んでいます。

Debug.Logでstrの内容を表示するとこう

ここから数字を一つづつ配列変数に入れていきます。
文字列strから区切り文字のカンマ","を検索して
文字を取り出す位置と文字数を決定します。

文字列の取り出し方を勉強します。

str = ",37,555,8,";

例えばstrの内容がこのようだったとします。

まず最初の区切りカンマを検索します。
文字列を検索するのにはIndexOfを使うそうです。

iDat[0] = str.IndexOf(",",iDat[0]);   //","を検索

strには最初(0番目)にカンマがあるので
実行すると iDat[0]には0が入ります。

iDat[1] = str.IndexOf(",", iDat[0] + 1);   //次の","を検索

次のカンマは先頭を0番目とすると3番目にあります。
iDat[1]には3が入りました。

ということは取り出す文字数は

iDat[2] = iDat[1] - iDat[0] - 1;

でiDat[2]には2が入ります。2文字取り出すのです。

strget= str.Substring(iDat[0], iDat[2]);

Substringで取り出す位置と文字数を指定して
strgetに保存。
strgetには文字列の37が入りました。

iDat[3] = int.Parse(strget);

取り出した文字列を数値型に変換して
iDat[3]には数値の37が入りました。

これをマップの配列変数にぶち込んでいく予定です。

////////////////////////////////////////
ー広告ー



-Unity

© 2024 Bou.O The World Powered by AFFINGER5