(スクリプト)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AutoMakeStage : MonoBehaviour
{
public TextAsset[] stageFile;
private string[] stageData;
private string[,] stageMap;
private int tateNum;
private int yokoNum;
public GameObject enemyGenePrefab;
public GameObject towerPrefab;
public GameObject setBotPrefab;
public GameObject rightPrefab;
public GameObject leftPrefab;
void Start()
{
// ステージのランダム化(テクニック)
int num = Random.Range(0, stageFile.Length);
string stageLines = stageFile[num].text;
print(stageLines);
// 改行でデータを分割して配列に代入
stageData = stageLines.Split('\n');
// 行数と列数の取得
yokoNum = stageData[0].Split(',').Length;
tateNum = stageData.Length;
print("yoko: " + yokoNum);
print("tate: " + tateNum);
// 多次元配列の定義
stageMap = new string[tateNum, yokoNum];
for (int i = 0; i < tateNum; i++)
{
string[] tempWords = stageData[i].Split(',');
for (int j = 0; j < yokoNum; j++)
{
stageMap[i, j] = tempWords[j];
if (stageMap[i, j] != null)
{
switch (stageMap[i, j]) // ★データは「左上」から順番に並んでいる(ポイント)
{
case "G": // 「j」は「横」ナンバー・・・>「X」に対応。「i」は「縦」ナンバー・・・>「Z」に対応。
Instantiate(enemyGenePrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.identity);
break;
case "T":
Instantiate(towerPrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.identity);
break;
case "S":
Instantiate(setBotPrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.identity);
break;
case "R":
Instantiate(rightPrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.identity);
break;
case "L":
Instantiate(leftPrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.identity);
break;
case "G2":
// Geneを横方向にする。(向きを変える)
Instantiate(enemyGenePrefab, new Vector3(-8f + j * 2, 1f, 8f - i * 2), Quaternion.Euler(0, 90, 0));
break;
}
}
}
}
}
}
(設定)
(実行結果)
<ステージ1>
<ステージ2>
<ステージ3>