【Unity】Visual Scriptingで、複数地点を巡回するGameObjectを作成する方法
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が指定した地点を巡回する。
ディスカッション
コメント一覧
まだ、コメントがありません