Unityに関連する記事です

 以下の内容で順番に実装を進めていきます。

手順6 ーNavMeshAgent による経路移動機能の準備ー
 9.NavMeshAgent の準備と設定



9.NavMeshAgent の準備と設定

1.設計


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

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

 ・タップした位置が NavMeshAgent の経路内である場合に、プレイヤーのキャラクターをそのタップした位置に向かって自動的に移動させる機能
 ・障害物(敵など)を NavMeshAgent の機能を利用し、プレイヤーの位置に向かって自動的に移動させる機能

 これらの機能を順番に実装していきます。

 そのためには、NavMeshAgent の準備と設定を事前に行っておく必要がありますので、
この手順ではそちらの準備を行っていきます。
 

2.NavMeshAgent


 NavMeshAgent の機能を利用し、経路内を自動的に移動させる機能を実装します。


NavMeshAgent
ナビゲーションと経路探索
ナビメッシュエージェント

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



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


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


 NavMeshAgent による AI による経路検索を行うためには、まず最初に移動範囲に設定したいゲームオブジェクト側への設定が必要になります。

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


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



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


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



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

 今回であれば FloorSet ゲームオブジェクトの Static にチェックを入れることで
子オブジェクトであるすべての Floor ゲームオブジェクトが Static に設定できます。親子関係を上手く活用しましょう




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

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





 Static 設定にはオプションがあります。
今回は設定していませんが、初期設定のままですと Bake だけではなくてゲームオブジェクト自体も移動できなくなります。

 ゲームオブジェクトは動的に移動させたいが、Bake はしておきたい、という場合には、
Navigation Static にだけチェックを入れるようにすることで実現できます。


Static 設定



4.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ビューかつ、Navigation ビューを選択している場合にはいつでも確認できます



 次に、同じ Navigation ビュー内にある Agents タブを選択してください。
この項目では、経路の計算を行う際の情報を設定することが出来ます。

 先ほどとは設定の値を変えて見ます。

Agents タブ



 この情報を元に Bake が行われるようになりますが、Agents を変更しただけでは計算は反映されません。
もう一度 Bake タブを選択して、再度、Bake ボタンを押して Bake し直してください。
先ほどとは経路の範囲が変わるはずです。

 以上で設定は完了です。
 
 NavMeshAgent の機能を利用するためには、移動範囲となるゲームオブジェクトに Static の設定を行います。
その上で移動用の設定条件を元に、実際の NavMeshAgent の移動範囲が事前に計算されて登録されます。

 この事前に計算しておく処理を Bake といいます。
Floor のゲームオブジェクトを追加したり、移動させたりするたび、Bake をやり直す必要があります。



 Navigation タブを選択していると、Scene ビューに青い範囲が表示されます。
これが Bake によって登録された NavMeshAgent が移動可能になる範囲です。


Scene ビュー



Scene ビュー



Bake のみ(ステージ用のゲームオブジェクトを非表示にすると、Bake のみ確認できます)



 Navigation タブではなくインスペクタータブに切り替えると、Bake している青い範囲は見えなくなります。
Bake 範囲を確認したい場合には Navigation タブに切り替えるようにしてください。

 以上で Bake は完成です。


5.FloorSet ゲームオブジェクトに Layer を設定する


 Bake は終了しましたが、次回の手順でキャラクターの移動機能に Ray による判定を利用するため、
そちらが機能するように FloorSet ゲームオブジェクトに Layer を設定します。

 新しく Floor という名前の Layer を作成し、FloorSet ゲームオブジェクトに設定してください。
static を設定した場合と同様に、子オブジェクトについても変更するか確認のウインドウが出ますので、Yes を選択して
子オブジェクトにもすべて Floor の Layer を設定してください。


FloorSet ゲームオブジェクト



子オブジェクト



 設定が確認できたら、完成です。
 


 以上でこの手順は終了です。

 => 次は 手順7 −キャラクターの経路移動機能− です。

コメントをかく


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

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

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3D脱出ゲーム(抜粋)

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

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

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

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

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

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

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

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

private



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

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