前回までで二つのオブジェクトをマップに配置できました。
今回は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が入りました。
これをマップの配列変数にぶち込んでいく予定です。
////////////////////////////////////////
ー広告ー