経路探索_パスファインディング

記事作成 2019年7月
PlayMaker 1.9.0 / Unity 2018.2.6f1

障害物を避けながら目標を追跡する。このような動きを実現します。@1~@3
Unityに標準で備わっているナビメッシュ(NavMesh)を使います。

ナビメッシュの詳しい解説は省きますが、この記事の内容を実践するだけなら
予備知識無しでも大丈夫です。 (公式マニュアル「Unity の ナビゲーションシステム」

----------------------------------------------
@1 追加アクションのインストール

PlayMakerにはナビメッシュにアクセスするアクションが、Add-Onとして提供されているので
それをDLして準備します。


Ecosystem から直接インストール (参考記事 [PM] Ecosystem) するか、
Pathfinding アドオンページ
https://hutonggames.fogbugz.com/default.asp?W1174
の、リンクをたどって


このページからダウンロードします。

----------------------------------------------

DLしたパッケージを、プロジェクトにドロップすればインストールできます。


PlayMakerのアクションウィンドウに、[NavMesh] [NavMeshAgent] が加わっていればOKです。

----------------------------------------------

@2 ナビメッシュの作成

こんなフィールドを作成しました。Plane の上に Cube を数個、つぶしたり伸ばしたりして
迷路っぽくしただけの、簡単なものです。


これらのオブジェクトをまとめて、Static 設定にします。ナビメッシュを Bake するために必要です。
(図は Plane だけですが Cube もすべてまとめて設定してください)

----------------------------------------------

Navigation ウィンドウを開きます。


Navigation ウィンドウで [Bake] ボタンを押し、探索範囲を作成。
Agent Radius は境界の余白になります。あんまり大きいと通路が途切れてしまったりも
するので、適宜設定します。

----------------------------------------------

@3 追跡オブジェの設定

Cylinder を作成し追跡者にします。動きやすいように少しサイズを縮小しています。
モデルの用意があればそれを使用しても構いません。
同様に、青いCube を Cylinder が追いかける目標として作成しています。


Cylinder に状態遷移を設定します。はじめの状態に
[Set Agent Destination As Game Object] のアクションを付けます。

すると図のような注意が出るので、クリックすると、NavMeshAgentコンポーネントが
追加されます。


追加されたコンポーネントを確認して、追跡スピードを、適当に設定します。


アクションの Destination には追跡目標物を設定します。
今回は直接、目標のCubu をドロップしていますが、Tag などでシーン上のオブジェクトを
選択し変数に格納した上で設定する、などもできます。
( [Find Game Object] [Get Random Object]等 )

Trigger Threshold は、追跡物体がどれぐらい動いたら再び追うか、の設定のようですが、
このぐらいでよいのかな。適当に設定してください。

これで追跡側の準備ができました。
----------------------------------------------
@ 結果

再生してみます。
目標の Cube はシーン上で操っていますが、Cylinder が Cube の位置を探知して障害物の
壁を避けつつ、追跡しているでしょうか。

ナビメッシュは多機能で、移動する障害物や、離れた場所へのジャンプなど様々な
表現ができます。 イメージに応じて、対応するPlayMakerのアクションを並べ試行錯誤
することになります。

今回の内容は、公式フォーラムのトピック 「Quick AI Pathfinding 」
https://hutonggames.com/playmakerforum/index.php?topic=10920.0

で示されている方法を、更にシンプルにして実現しています。他の方法も知りたい方は
参考になるかもしれません。
----------------------------------------------
Cube に 十字キーでキャラクターを操作する のコントローラーをつけ、
さらに、カメラの動き のカメラ後方固定ノード、接触の判定 などのTips を
使い、即製のなんちゃってドットイートゲームに仕立ててみました。



WebGlでビルドして、アップしています。(ライトの具合が上手く調整できてないのですが)
ブラウザで実際に操作してみることができます。

パスファインディング参考ゲーム
https://sino.sakura.ne.jp/games/nya_pathgame/ 別ウィンドウで開きます。

0 件のコメント:

コメントを投稿