9.Spawning Enemies
Prefab化したEnemyを、プレイ中にスポーンさせる処理を実装する。チュートリアルや教本でよく見るオーソドックスな方法がベースになっているものの、スポーンする種類の増やし方や複数のスポーン地点の設定など、今後のために押さえておきたいポイントも含まれている。
なお筆者の環境(Unity2018 2.1f1)では、PrefabにZomBearとHellephantが存在しなかったため、Complete-Gameフォルダからその2つのPrefabをコピーしてきた。その際、ScriptはComplete-Gameフォルダ内のものを参照していたため一度リムーブし、MyProject内のScriptに付け替えた。
ZomBear,HellephantにAnimatorを設定
ZomBearの場合
ZomBunnyと同じアニメーション、ステート、パラメータを流用できるため、ZomBunnyと同じEnemyACをそのままAnimatorのControllerとして設定する。
Hellphantの場合
モデルの大きさや骨格、関節が異なるためEnemyACをそのまま流用することができない。このような、異なる骨格、アニメーションを持つモデルでも、同じステート、トランジションを流用したいときに登場するのがAnimation Override Controllerである。
Projectパネル内で新たにHellephantAOCを作成したら、InspectorのControllerに基となるAnimationControllerをD&Dで設定する。するとその下に、ステートの一覧と上書きするアニメーションを設定するカラムが表示される。今回は、Hellephantのモデル内にあるMove,Idle,Deathのアニメをそれぞれ上書きする。
最後にHellephantのAnimatorコンポーネントのControllerにHellephantAOCを設定して準備完了。
何が同じアニメーションで、何がそうでないのか、については一度3Dのモデリングを学んだほうが理解が深まるような気がする。今の時点では、BunnyとBearは大きさも骨格も同じだから表面のテクスチャだけ張り替えてアニメを流用してるんだろうな、というくらいの理解で流しておく。というかそうしないとドツボにはまりそう……。
EnemyManagerの準備
空のGameObjectを作成し、EnemyManagerとリネームする。スクリプトEnemyManagerが用意されているのでそれをアタッチし中身を確認しておく。
変数
1 2 3 4 5 6 7 8 9 10 11 12 |
public PlayerHealth playerHealth; //playerHealthクラスの格納。InspectorにD&DするのはPlayerオブジェクトでOK。勝手に判定してplayerHealthクラスを入れてくれる。すげぇ。 public GameObject enemy; //スポーンさせる敵のPrefabを入れる。 public float spawnTime = 3f; //何秒ごとにスポーンするかの設定 public Transform[] spawnPoints; //スポーンする場所の設定。配列になっているので、スポーンする場所を複数設定できる。が、本チュートリアル内では行わない模様。 |
Startメソッド
1 2 3 |
InvokeRepeating("Spawn",spawnTime,spawnTime); //「Spawnメソッドを、本関数が読み込まれたspawnTime後に実行し、その後spawnTime毎に実行を繰り返す」の意 |
Spawnメソッド
1 2 3 4 5 6 7 8 9 10 11 12 |
if(playerHealth.currentHealth <= 0f) { return; } //プレイヤーの体力が0を割っていたらそこでメソッドを抜けて、もうエネミーはスポーンさせない。 int spawnPointIndex = Random.Range(0,spawnPoints.Length); //配列にしてあるspawnPointのうち、どれを取得するかランダムで決める Instantiate(enemy,spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); //上記で決めたspawnPointの場所、方向に、enemyを生成する |
EnemySpawnPointの準備
上記のpublic Transform[] spawnPointsに代入するため、EnemyごとにSpawnPointを準備する必要がある。まずはZomBunnyのSpawnPointを設定するため、空のGameObjectとしてZombunnySpawnPointを作成する。空のGameObjectを視覚化するため、Inspectorの名前の横から色を設定することができる。ZonbearSpawnPoint,HellephantSpawnPointも同様にコピーペーストして作成し、それぞれ既定のPositionへ置く。
EnemyManagerの設定
EnemyManagerのPublicな変数にInspectorから値を設定して行く。
PlayerHealthは、前述したようにPlayerオブジェクトをそのままD&D。
EnemyはまずZomBunnyのPrefabをD&D。(つまりEnemyの数だけEnemyManagerスクリプトをアタッチし設定する必要がある)
SpawnTimeは3のままでOK。
SpawnPointsは一見D&Dする場所が無いように見えるが、先ほど作成したEnemySpawnPointをD&Dすれば配列の1要素として設定することができる。二個目をD&Dすれば配列の二個目として、どんどん追加していける。
ZomBear,Hellephantの分もEnemyManagerスクリプトをアタッチ、設定したら今回の作業は完了だ。
おっと、HellephantのSpawnTimeをちょっと短くするのを忘れずに。
実装確認
いろんなところからいろんな敵が出てくるようになった。だんだんゲームの様相を呈してきたぞ。
ゾンビゲーらしくラッシュとかあってもいいなあ。
第10回はコチラ
第8回はコチラ
「Unity公式チュートリアルSurvival Shooter日本語実践Chapter.9」への2件のフィードバック