出現場所から一定時間毎に人数制限内で敵を出現させる

前回までで、敵キャラが主人公キャラに接近したら追いかけてくるというスクリプトを組みました。

Unityで主人公キャラが近づいてきたら追いかける敵キャラを作る
Unityで主人公キャラクターが敵キャラクターに近づいたら敵が主人公に近づいてくるようにしたいと思います。

今回はその敵キャラを最初から配置するのではなく、自動で配置してみようと思います。

敵キャラを完全にランダムな位置に出現させるのも面白いですが、主人公が行けないエリアに発生するリスクもあるので、今回は出現場所を決め、そこから一定時間毎に敵キャラを出現させるようにしたいと思います。

出現場所自体をプレハブで作成し、出現場所プレハブをフィールドに配置していきます。

永遠に敵キャラが出現すると困るのでその出現場所で出現出来る人数も制限します。

スポンサーリンク

シーン上のゲームオブジェクトをプレハブ化する方法

まずは今までシーン上に配置していたキャラクターをProjectのAssetsエリアにprefabフォルダを作り、そこにドラッグ&ドロップしてプレハブにします。(Assetsエリアにシーンのゲームオブジェクトをドラッグ&ドロップするとプレハブになります)

シーン上に配置したキャラはいらないので削除します。(プレハブにする前に削除して最悪の事態を招かないよう気を付けてください)

プレハブにするとスクリプト上でそのプレハブをシーンに配置する事が可能になります。
最初から配置するキャラクターやオブジェクトも使いますが、量産型のものはプレハブにしてスクリプトでシーンに配置した方がかなり楽になります。

敵キャラの出現場所を作成しプレハブ化する

それでは次に敵キャラの出現場所を作ります。ヒエラルキー上で右クリック→Create Emptyで空のオブジェクトを作り、名前をAppearance(名前はご自由にお付けください)とします。

敵キャラを出現させるAppearスクリプトを取りつける

Appearanceの位置をx:17、y:0、z:18とし、Appearという新しいスクリプトを作りコンポーネントに追加します。

ここを敵キャラの出現場所とします。
出現場所はコピーしていろいろな場所に設置する事が出来るようにします。

敵キャラを出現場所に登場させるスクリプトの作成

Appearの中身を作っていきます。

出現させる敵キャラはpublicで宣言しているのでインスペクタで指定します。

いろいろな敵キャラを出現させたい場合は配列で宣言する事も出来ます。
他にもインスペクタで指定出来る要素に、次に敵が出現するまでの時間、この場所から出現する最大数があります。

Start関数内で初期化します。

Update関数内では出現させた敵の数が最大人数より少ない時で、さらに出現までの待機時間を超えた場合に出現の処理をします。

実際に出現させる関数Appearでは敵キャラのインスタンスを入れておく配列数分の繰り返しをし、配列の要素がnull、つまり保存されていなければそこにプレハブから作成したインスタンスを入れます。

プレハブからインスタンスを生成する方法

プレハブからインスタンス(シーン上に配置したオブジェクトの実体)を作成するには、

GameObject.Instantiateを使います。
今回はInstantiateの引数は一つですが、位置と角度を指定してインスタンスを生成する事も出来ます。

指定しない場合のデフォルトの位置はVector3.zero(0, 0, 0)、角度はQuaternion.identityが指定されています。

Quaternion.identityは生成したインスタンスの親の角度、親がなければワールド(ルート)の角度が指定されるみたいです。

終わりに

これでスクリプトからプレハブをシーンに登場させる事が出来るようになりました。
敵キャラを攻撃して敵キャラが倒されて数が減る、という機能をまだ作っていないので、

最大出現人数の確認とかまではしていないんですが・・・・、その機能が実現した時に確認できると思います・・・・いいかげんすぎですね・・・(-.-)

今回はそれほど難しいスクリプトを組んでいるわけではないので、比較的理解がしやすいと思います。
敵キャラクター出現時に何の音も表現もないのでいつどこに出現しているか解り辛いです。
その為、次回は敵キャラクターが登場した時にエフェクトを加えてみたいと思います。

エフェクトだけだとそうとう短い記事になりそうな予感・・・・・。

最後にこれまでで出来ているサンプル画像です。
あまりにも文字ばっかりで味気ないので追加してみました。
UnityWebPlayerでアップしようと思ったんですが容量オーバーで出来なかったので画像になります。

一定時間毎に出現する敵のサンプル

うまく映像が保存出来ませんでしたが、こんな感じです。