【Unity】Visual Scriptingで、複数地点を巡回するGameObjectを作成する方法

Unity

スポンサーリンク

Unity2021から標準パッケージとなった"Visual Scripting(ビジュアルスクリプティング)"(旧Bolt)を使用して、設定した複数の地点を巡回するGameObject作成するやり方です。
NavMeshを使います。

完成動作

※設定した4か所(四隅)をCubeが巡回しています。

作り方

1.シーンに各オブジェクトを配置

1-1.以下のように配置する。床をPlane、巡回するGameObjectをCube(赤)とした。

2.巡回させたい地点を作成

2-1.空のGameObjectを作成

2-2.空のGameObjectの名前を"PatrolPoint"に変更

2-3."PatrolPoint"の子の要素に巡回させたい地点の数だけ空のGameObjectを作成し、"PointA"、"PointB"、・・・などというように名前を付ける。
※今回はPointAからDの4つ作成

2-4.PointAからDを巡回させたい任意の場所に置く。
今回はPlaneゲームオブジェクトの四隅に置いた。

3.NavMeshをベイク(Bake)

NavMeshを使ってCubeオブジェクトを巡回させるので、Cubeオブジェクトを巡回させる場所をBakeする。

3-1.HierarchyタブでPlaneオブジェクトを選択して、InspectorタブのStatic欄で"Navigation Static"を選択
  ※"Navigation Static"を選択したGameObjectしか、NavMeshでBakeされない(移動可能にならない)

3-2.以下のように選択して"Navigation"タブを表示する。

3-3.とりあえず設定はデフォルトのままで、"Bake"タブを選択して右下の"Bake"を押下
  パソコンのスペックによっては"Bake"に時間がかかるので待つ。

3-4.Sceneタブを見て、"Navigation Static"にしたPlaneオブジェクトが青い枠で囲われていることを確認
  この青い枠が、NavMeshAgentを使用して移動できる範囲

4.巡回させるGameObjectの設定

4-1.Cubeに"Nav Mesh Agent"コンポーネントを追加

4-2."Nav Mesh Agent"コンポーネントの"Stopping Distance"プロパティの値を0.5に変更
※"Stopping Distance"プロパティが0だと目的地との距離が完全一致しないといけなくて、完全一致は難しい場合もあるので、ある程度近づけばよいということにする。

4-3.その一つ下の"Auto Braking"プロパティのチェックを外す。
※これは有効になっていると、目的地点の到着時にエージェントの移動速度が減速する。今回は巡回させるので、この設定は無効の方がスムーズな動きをする。

5.複数地点を巡回させるビジュアルスクリプトを作成

5-1.Cubeに"Script Machine"コンポーネントを追加

5-2.以下のような変数を作成
※PatrolPointのValueの数は、2-3で作成した巡回させたい地点の数だけ作成

5-3.作成した変数のValueに以下のように値を入れる。
PatrolPointリストには、PointAからDをそれぞれ入れる。
CurrentPatrolPointIndex変数は、0のままでよい。(この後、ビジュアルスクリプト内で現在の目的地(PatrolPointリストの何番目を目的地にしているか)を保存しておくために使用

5-4."Graph"プロパティの"New"ボタンを押下

5-5.ファイルの保存ダイアログが開かれるので任意の場所にPatrolという名前で保存する。

5-6."Edit Graph"ボタンを押下して、以下のようにグラフを作成する。

完成

これでゲームをスタートするとCubeが指定した地点を巡回する。

Unity

Posted by ton