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

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

FTLみたいなものを作ってみる(5) 真空消火

真空消火を実装しました。

f:id:yasu9780:20161211002740g:plain

  • まず火事を起こします。
  • 火事は徐々に延焼度が進みます(酸素が濃いほど早い)
  • 次に外壁エアロックを開けます。
  • 部屋の酸素濃度が下がっていきます。
  • 酸素濃度減少で、火事の延焼速度も遅くなります。
  • 酸素減少で、急速に火事が沈下します。
  • 外壁エアロックを戻します。
  • 酸素濃度が上昇していきます。


床の上に、透明のシェーダーのGameObjectをかぶせておいて、酸素濃度に応じて透明度を調整して真空状態を表現しています。
床に火事を起こすと、床の炎上値が上昇を初めます。火が消えると、火事のParticleをDestroyします。

延焼度100で壁が無い場合は隣に燃え広がるを実装。

        void FireUpdate()
        {
            for (int i = 0; i < floor.Count; i++)
            {
                if (floor[i].fire == 0) continue;

                int x = (int)floor[i].o2Filter.transform.position.x;
                int y = (int)floor[i].o2Filter.transform.position.z;
                int no = GetRoomNo(x, y);// 床が所属する部屋番号を取得
                if(no==-1) Debug.Log("Unknown Room Error");

                if (no != -1 && floor[i].fire < 100)
                {
                    floor[i].fireUp(room[no].o2 / 50);//酸素濃度に応じて延焼が進む
                    if (floor[i].fire == 100) FireAdvance(x, y); //隣に燃え広がる
                }
                if (no != -1 && floor[i].fire > 0)
                {
                    floor[i].fireDown((100f - room[no].o2) / 10f);//酸素薄いと鎮火進む
                    if (room[no].o2 == 0) floor[i].fireDown(10); //真空では急速に鎮火
                    if (floor[i].fire == 0) { Destroy(floor[i].fireParticle); } //完全に消火
                }
            }
        }