またも間が空いてしまった。ブログの記事に時間を割くよりは制作を優先したらこうなった。今回は Nostalgia のマップに配置したタイルの ID に対応する敵をタイルの位置に発生させるスクリプトを晒す。マップコンポーネントを追加したゲームオブジェクトに以下のスクリプトを追加して使う。例によって品質は KS だ。
using UnityEngine;
using System.Collections;
using Nostalgia;
public class EnemySpawner : MonoBehaviour
{
[SerializeField] private GameObject[] enemyPrefabs;
private Map enemySpawnerMap;
private Vector3[] tilePositions;
private int[] tileIds;
private Cell[] cells;
void Start ()
{
enemySpawnerMap = GetComponent<Map> ();
cells = enemySpawnerMap.cells;
tilePositions = new Vector3[cells.Length];
tileIds = new int[cells.Length];
for (int i = 0; i < cells.Length; i++) {
tilePositions[i] = enemySpawnerMap.MapPointToWorldPoint (cells[i].position);
tileIds [i] = cells [i].tileID;
}
StartCoroutine (SpawnEnemy ());
}
IEnumerator SpawnEnemy ()
{
while (true) {
for (int i = 0; i < cells.Length; i++) {
bool b1 = true; // 待ち時間以外の敵インスタンスの出現条件を書く
bool b2 = true; // 敵インスタンスの向き変更条件を書く
if (b1) {
GameObject enemyInstance = (GameObject)Instantiate (enemyPrefabs [tileIds[i]], tilePositions[i], (b2 ? Quaternion.identity : Quaternion.Euler (0f, 180f, 0f)));
}
}
yield return new WaitForSeconds (5f); // 待ち時間
}
}
}
敵の種類だけ異なるタイルを作るわけだが、全部透明の同じグラフィックにするとインスペクターなしで区別できない。これでは扱いづらいのでどうしたものか。それにしても Tile Component の使いどころがわからんな〜。
0 件のコメント:
コメントを投稿