4.Creating Enemy #1
4章のエネミー作成、やっていきます。今回は初めて見るNavMeshという機能が登場します。敵を任意の目的地に向かって歩かせることのできるドチャクソ便利機能のようなので、しっかりマスターしたいね。
エネミーのモデルをシーンに配置する
エネミー撃破時に出現させるパーティクルが用意されているので、それをエネミーの子オブジェクトとしてくっつける。また、エネミーをShootableレイヤーに変更する。FloorはFloorレイヤーに設置したように、射撃されるものはShootableレイヤーへ。タグじゃなくてレイヤーなんだな。
エネミーにRigidbodyをアタッチするのも忘れずに。Rigidbodyのdrag,angularDragはプレイヤー同様Infinityに、PositionのYとRotationのX,ZをFreezeにしておく。
CapsuleColliderをアタッチ、Centerを(0,0.8,0)、Heightを1.5に。
また、プレイヤーへの攻撃を判定できるようにSphereColliderをアタッチし、IsTriggerにチェックを入れる。Centerは(0,0.8,0),Radiusは0.8に。当たり判定を持ち、かつTriggerを使いたいときはColliderを二つつけてええんやね。Triggerは、エネミー本体の当たり判定よりやや大きめに。当たり判定より小さくするとTriggerにプレイヤーがぶつからなくて意味ないからね。
AudioSourceをアタッチ、エネミーのやられボイスをつける。PlayOnAwakeのチェックを外す。
NavMeshとは?
プレイヤーを追っかけるためのルートを計算してくれるAIシステムらしい。NavMeshAgentをアタッチすると、謎だったBakingというワードが出てきた。オブジェクトの描画の仕組みだと思ってたけど、NavMeshで経路を作成することをベイクと呼ぶのは間違いないらしい。描画やオブジェクトの計算するときにつかう一般的な言葉と理解しておこう。
Unity2018.2.1f1ではいくつか動画の時からアップデートがかかっていて、Navigationウィンドウを開くには、Window->AI->Navigationからアクセスする必要がある。また、WidthAccuracyは存在しない模様。
また、NavMeshでルートとして判定されるオブジェクトには、NavigationStaticのチェックがOnになっている必要があるため、今後自分で使う際には要注意だ。
ZonBunnyのアニメ設定
プレイヤーと同様、AnimatorでIdle,Move,Deathのモーションを設定し、Transitionをつけていく。HasExitTimeのチェックがもしついてたら外しておく。
この時点ではMoveアニメをデフォルトとし、歩いてついてくればOK。
ZonBunnyのスクリプト
ご丁寧にもコードの書かれたScriptが用意されているのでそれをアタッチし、中身を確認するだけである。この時点では、NavMeshによるパスファインディングを設定する部分だけが有効になっており、細かい条件分岐はコメントアウトされている。とにかく覚えるべきは、
1 |
nav.SetDestination(目的地のVector3) |
で目的地へ向かうNavMeshを設定できる、ということだ。
また、PlayerがPublicで宣言されていない理由として、Enemyはシーン開始後に生成することになるためInspector上でPlayerをD&Dできないから、と言われているが、Prefab化する時点でD&Dしておけばいいんじゃないの?というのは正直腑に落ちてない。じっさいやってみたら動くし。でもここは素直に従っておこう。あとでInstantiateするとき試してみよう。
実装確認
ここまで出来たら実装確認。今回も問題なくZonBunnyちゃんがプレイヤーの動きに合わせて着いてきます。
第5回はコチラ
https://gameshi.info/?p=327&preview=true
第3回はコチラ
「Unity公式チュートリアルSurvival Shooter日本語実践Chapter.4」への2件のフィードバック