2014年11月4日火曜日

敵を発生させるスクリプト

またも間が空いてしまった。ブログの記事に時間を割くよりは制作を優先したらこうなった。今回は 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 件のコメント:

コメントを投稿