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

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

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

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

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

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

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

スポンサーリンク

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

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

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

プレハブにするとスクリプトからそのプレハブをシーンに配置する事が可能になります。

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

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

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

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

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

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

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

AppearScriptの中身を作成していきます。

フィールドの宣言とStartメソッド

まずはフィールドの宣言とStartメソッドを作成します。

出現させる敵はインスペクタのEnemysに設定します。

appearNextTimeは次にその場所から敵が出るまでの時間で、maxNumOfEnemysはこの場所から出現させる敵の数で、numberOfEnemysは実際に出現させた敵の数、elapsedTimeは最後に敵を出現させてからの経過時間が入ります。

Startメソッドでは出現させた敵の人数と経過時間を初期化しています。

敵を出現させるかどうかの判定処理

敵を出現させるかどうかはUpdateメソッドで行います。

出現させた敵の数が最大出力数と同じ以上であればreturnを使ってその後の処理をさせません。

まだこの場所から出現させる事が出来るなら、経過時間を増やし、次に出現させる時間を超えた時にAppearEnemyメソッドを呼び出し敵を出現させます。

敵を登場させる処理

敵を登場させる処理はAppearEnemyメソッドで行います。

敵のプレハブの配列から敵を選んでインスタンス化する為、Random.Rangeを使ってランダム値を作成します。

また敵を登場させる時の角度もRandom.valueを使ってランダム値を取得します。

Random.valueは0.0~1.0の値のランダム値が得られるので、そこに360をかけて0~360の間の角度を取得します。

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

GameObject.Instantiateを使います。

Instantiateの引数をインスタンス化するゲームオブジェクトの1つだけ指定すると

ゲームオブジェクトがインスタンス化される位置はVector3.zero(0, 0, 0)、角度はQuaternion.identityになります。

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

敵の位置はAppearanceゲームオブジェクトの位置で、角度はY軸の角度だけをランダムにしたいので(XやZを変えると傾く為)Y軸の角度だけを指定しています。

AppearEnemyスクリプトの設定

AppearEnemyスクリプトが出来たのでインスペクタで設定をします。

AppearScriptスクリプトの設定

敵のプレハブが1つしかないので、masasi君を敵に見立てて設定してみました。

終わりに

これでスクリプトからプレハブをシーンに登場させる事が出来るようになりました。

敵キャラを攻撃して敵キャラが倒されて数が減る、という機能をまだ作っていないので、同時出現数の機能は省きました・・・。

敵を倒せるようになれば、AppearEnemyスクリプト内でリスト等を使ってここから出現させた敵を管理しておき、敵が倒された時は敵のスクリプトからAppearEnemyスクリプト内の処理を呼び出し、リストから削除する事によって同時出現での制限をする機能も追加出来ると思います。

敵キャラクター出現時に何の音も表現もないのでいつどこに出現しているか解り辛いです。
その為、次回は敵キャラクターが登場した時にエフェクトを加えてみたいと思います。

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

最後にこれまでで出来ているサンプル画像です。
あまりにも文字ばっかりで味気ないので追加してみました。

UnityWebPlayerでアップしようと思ったんですが容量オーバーで出来なかったので画像になります。

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

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

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます