AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

SpriteでMapを動的に表示する(7)

  • フォントは2D RogueLike同梱のやつを使用(昔のアーケードゲームっぽい)
  • フロア開始前に、Floor数字を表示
  • スライムを3匹倒すと宝箱出現
  • 鍵をとって出口に行くと、次のフロアに行く
  • シングルトンは使わずに、シーン永続

基本的なところはできました。

f:id:yasu9780:20150620102217p:plain

あとは、モンスターの種類を増やしたり、宝箱が出る条件を変えるといった処理。
タイマーが切れると、足の速い敵が来て殺しに来るとかあったかな。

ドルアーガの塔 - Wikipedia

ウィル・オー・ウィスプ系 (WILL-O-WISP) に移動 - )[編集]. フロアの残り時間が60秒を切った時点で登場する火の玉。フロアによっては始めから登場する。倒すことはできず、接触するとミスになるが、指輪系アイテムの取得で通過可能になる。

フロア生成に関しては、
 2D RogueLikeTutorialだと、シーンとして表現してシングルトンを使ってましたが、そういうゆうのは無しで作りました。
 なので、新しいフロアに行くときは、初期化処理を作る必要があります。
 ダンジョン的には、ポールとポールの間の壊すことができる壁を消去
 あと、残ったモンスターや残ったアイテム類を消去。あとプレイヤー自体もDestroy

消すのはこんな感じで

GameObject[] obj=GameObject.FindGameObjectsWithTag("Pole");
foreach(GameObject obs in obj) Destroy(obs);

一つ一つ検索してDestoryしたら、暴走しました。
これはおそらくDestroy直後はobjがnullにならないので、そのへんの関係だと思います。
Unityのnullはnullじゃないかもしれない - Qiita


 そして、壁生成処理をやり直して、Floor情報にそってモンスターを生成する(例えば1面はグリーンスライム8匹)

 Floor 1みたいな表示を挟む時に、ダンジョンの外壁とか表示されていてはまずいので、ダンジョンのSpriteをすべて、MapRootというObjectのchildにして、SetActive(true/false)で、ダンジョンの表示・非表示を切り替えました。


 まだ、ダンジョンが袋小路になるって問題が残ってるんですが、ダンジョン生成の動画がありました。
 まだアルゴリズムで必要な処理が残ってますねwww.youtube.com