Unityに関連する記事です

 障害物について、2回の手順に分けて設計と実装を行います。

 人型の障害物は、徘徊タイプ、追跡タイプ、それらを組み合わせたものを検討します。
いずれのタイプも視界の概念を持ち、視界内にプレイヤーが侵入した場合に反応します。

 障害物の移動方法については色々な制御方法がありますが、今回は NavMeshAgent コンポーネントの機能を利用して制御していくことにします。

 この手順において、まずは NavMeshAgent コンポーネントを運用できる状態にしていきます。



<新しく学習する内容>
 ・NavMeshAgent



設計


 障害物の移動については、色々な手法があります。

 NavMeshAgent の機能を利用して移動させるのか、DOTween の機能を使って移動させるのか、Rigidbody の機能を利用して移動させるのか、
あるいはそれらを敵の種類に応じて切り替えるのか、などを検討します。
 
 今回の実装では、NavMeshAgent の機能を利用し、敵をプレイヤーの位置に向かって移動させる機能を実装します。


NavMeshAgent
https://docs.unity3d.com/ja/current/Manual/Navigat...
https://docs.unity3d.com/ja/2019.4/Manual/class-Na...

 他にも記事が多くありますので、自分で調べておきましょう。



 なお、NavMeshAgent コンポーネントと NavMeshObstacle コンポーネントを一緒にセットしても正常に機能しないため、注意しましょう。
Unity公式マニュアル
NavMesh Agent を他のコンポーネントと共に使う
https://docs.unity3d.com/ja/current/Manual/nav-Mix...


NavMeshAgent の範囲としたいゲームオブジェクトの static にチェックを入れる


 NavMeshAgent による AI による経路検索を行うためには、移動させたいゲームオブジェクト側にも設定が必要になります。

 経路の範囲に指定したいゲームオブジェクトを選択し、インスペクター上部の右側にある static にチェックを入れます。


<ゲームオブジェクトの static にチェックを入れる>



 static のチェックを入れたゲームオブジェクトに子オブジェクトが存在する場合には、
この操作に合わせて子オブジェクトも static にするか確認するポップアップが開きますので、
そちらも Yes, chnage children を選択して、指定したゲームオブジェクト全体を static の設定にします。


<子オブジェクトが存在する場合には、子オブジェクトも static にする>



 複数のゲームオブジェクトを選択することも可能ですので、経路として指定したいゲームオブジェクトすべてに static の設定を行います。

 なお、static にチェックを入れたゲームオブジェクトは静的ゲームオブジェクトとして扱われます。
そのため、Sceneビュー内でも、Transform コンポーネントによっても、移動や回転は行えなくなります。(スクリプトからの制御も出来ません。)
 
 動的(通常の)ゲームオブジェクトではない代わりに、つまり、ゲーム内において移動・回転をしないことを条件に、経路の範囲として指定できるようになっています。

 以上でゲームオブジェクト側の設定は完了です。


Navigation ビュー内で Bake を行う


 続いて、static に設定したゲームオブジェクトを AI が移動経路であると判断するために Bake(ベイク) 作業を行います。

 Bake とは焼き付けの意で、この作業を行うことで、static のゲームオブジェクトと Bake の設定とを判断し、移動可能な経路を生成します。

 Unity の左上のメニューの中から Window > AI > Navigation を選択してください。Navigation ウインドウが開くか、インスペクター内に Navigation ビューのタブが追加されます。
インスペクターのビューを Navigation ビューに切り替えてください。


Inspector ビューを Navigation ビューに切り替える



 Navigation ビュー内にある Bake タブを選択し、右下にある Bake ボタンを押してください
Scene ビュー内に水色の経路が表示されれば、Bake 成功です。こちらが NavMeshAgent が AI によって移動する範囲になります。


Bake した際の Scene ビュー画像


 
 Bake した経路情報は自動的にセーブされます
 
 この情報は、Sceneビューかつ、Navigation ビューを選択している場合にはいつでも確認できます


 以上で設定は完了です。


移動範囲の調整を行い、再度 Bake する


 必要に応じて、移動範囲の調整を行います。

 Bake された経路で問題なければ、この手順は不要です。

 初期値で Bake を行うと、想定しているよりも経路の内容が大きかったり、小さかったりする場合があります。
これは、Bake を行う際の Agents の設定に起因するものです。

 Navigation ウインドウ内に Agents タブがありますので、こちらの Radius の値を小さい値にしていくことで、
移動不可能なタイルマップになるべく近い位置まで侵入して移動することが可能になります。

 それ以外の項目も設定を変えることで、飛び越えることが出来る段差の高さ、侵入できる高さ、登れる角度などを設定可能です。


Navigation ウインドウ/ Agents タブ 画像



 Bake は何回でも行えますので、こちらの設定を変更して Bake をやり直して、想定している移動範囲になるように調整を行ってください。

 Agents の設定については、設定項目について調べて、自分で設定を変えたりして、どのように Bake 範囲が変化するかを確認しておくとよい学習になります。



 以上でこの手順は終了です。
続けて、この情報を元に NavMeshAgent コンポーネントの制御をスクリプトを通じて行えるようにして、障害物の AI 移動制御を行います。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます