シェケナベイベー

れっつだんしんぐ!

3D Game Kit Liteによる学習~その5


※本ページはUnityエディタ2021.3.4f1バージョンにて確認しています。

 

3D Game Kit Liteを利用した学習過程をまとめてみようシリーズ第5弾。以下のリソースを元にまとめています。

 

assetstore.unity.com

learn.unity.com

 

今回のテーマはEnemie。3Dアクションならば敵が居なくちゃ始まらないし、Unityではこれらもコンポーネントとして上手く設計されているので使い方を覚えよう。まずいつものPrefabs>Charactersフォルダを探すとEllen以外にEnemiesフォルダが用意されている。それぞれ

  • Chomper:近接型の敵でEllenを探知すると向かって来て近接攻撃を行う。
  • Spitter:遠隔型の敵でEllenを探知すると遠距離から酸を吹きかけてくる。Ellenが近づくと距離を取ります。

それぞれのEnemieに基本的なふるまい=Behaviorスクリプト、ダメージ設=Damageableスクリプトで敵の挙動を設定できるのでそれぞれ学習を行う事にする。

 

Behaviorスクリプト

Chomper&Spitterにそれぞれ用意されており、重要なのはPlayer Scanner部分。▲部分をクリックすると詳細が表示されるので内容を確認して欲しい。

  • Hight Offset:感知センサーの眼の高さ。
  • Detection Radius:Ellenを感知する距離。青いゾーンの大きさで表示される。
  • Detection Angle:Ellenを感知する円の角度。青いゾーンの角度で表示される。
  • Max Height Difference:
  • View Block Layer Mask:

個別要素として

  • ChomperにはTime to Stop Pursuit:追尾をやめる時間
  • SpitterにはFleeing Distance:Ellenとの間に取る距離

が用意されています。赤いゾーンは次のDamageableスクリプトの設定で変化します。

 

Damageableスクリプト

Max Hit Points:Enemieの体力。

Invulnerability Time:無敵時間

Hit Angle:攻撃範囲角度

Hit Forward Rotation:攻撃回転数

 

基本設定の説明は以上としてそれぞれ実際にステージに配置した後の微調整をまとめます。まずはChomperから。

  • ChomperをPrefabs>Characters>EnemiesからScneneへドロップ
  • Chomper Behaviorスクリプト内のDetection Radiusを4に指定して青いゾーンが小さくなる事を確認する。これはChomperのEllenを探知する範囲を示す。
  • Detection Angleを90に調整すると青いゾーンは更に狭い範囲を示す、これはChomperの探知角度=死角を指定する設定だ。
  • Runテストをしてみよう。おや?探知範囲に入ると反応はしているようだが?

 

ここで新しい課題。UnityではNavMeshと総称されるいわばEnemie用のAIナビゲータ機能が用意されている。たとえば巡回ルートを設定したり、探査する範囲を指定したりと言う機能だ。詳細な説明は割愛するがChomper本体には既にNavMeshコンポーネントが設定されているのが確認できる。ここで不足しているのは歩きまわる範囲を指定するPlaneオブジェクトへのNavMesh指定不足だ。やってみよう。

  • HieracheyからPlaneを選択する
  • AddComponentでNavMeshSurfaceを追加する
  • 追加されたNavMeshSurfaceのInspectorからAgent TypeにChomperを指定する
  • Include LayersをいったんNothingにしてから、再度Enviromentを指定する
  • 上記設定が確認できたら最後にBakeをクリックで完了だ

最後にBakeを忘れずに!このBakeであるが言葉通りに焼き付けを指示する行為。NavMeshSurfaceが提供するサービスをPlaneオブジェクトに焼き付ける=実行時には読まれるだけで可変する事のないパラメータとして決定するということだ。言い換えれば

 

※Sceneに新たにObjectが配置されたり、あるいは移動させたりしたら再度Bakeしないと正しいNavMesh行動が再現できない!

 

ということだ。覚えておいてほしい。

 

またこのBakeのタイミングでEnemieに内包されるNavMeshコンポーネントが歩ける範囲をPlane上に認識し、前回は追いかけてこれなかった状態が改善されているはずだ。Runして確かめてみてくれたまへ。

 

なおNavMeshSurfaceはNavMeshコンポーネントに含まれるサービスの一つで詳細は以下GitHubを参照されたい。

github.com

 

 

同様にしてSpitterを追加してみよう。

  • SpitterをPrefabs>Characters>EnemiesからScneneへドロップ。
  • Spitter Behaviorスクリプト内のDetection Radiusを6に指定して青いゾーンが小さくなる事を確認する。これはSpitterのEllenを探知する範囲を示す。
  • Detection Angleを270に調整すると青いゾーンSpitterの背後に死角が出来る事を示す。
  • Fleeing Distanceに4を設定する。これはEllenがこれ以上近づいたら離れる判断をする距離の指定だ。
  • 最後にView Block LayerにEnviromentが指定されている事を確認して欲しい。
  • Runテストをしてみよう。距離を取って酸を吐いてくる行動と、近づき過ぎると逃げ出す事が確認できたかい?

Spitterは遠隔型なのでパラメータの調整が少し複雑なのが解るだろうか。背後に死角を作った事により逃げ出した後にはバックを晒しだしてしまうので優し過ぎる設定かもしれない。この辺りの匙加減はゲームチューニングの醍醐味だ。色々試してみて欲しい。

 

keets.hatenablog.com