Unity2021から標準パッケージとなった”Visual Scripting(ビジュアルスクリプティング)”(旧Bolt)を使用して、設定した複数の地点を巡回するGameObject作成するやり方です。
NavMeshを使います。
完成動作
※設定した4か所(四隅)をCubeが巡回しています。
作り方
1.シーンに各オブジェクトを配置
1-1.以下のように配置する。床をPlane、巡回するGameObjectをCube(赤)とした。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-56-1024x406.png)
2.巡回させたい地点を作成
2-1.空のGameObjectを作成
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-57.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-58.png)
2-2.空のGameObjectの名前を”PatrolPoint”に変更
2-3.”PatrolPoint”の子の要素に巡回させたい地点の数だけ空のGameObjectを作成し、”PointA”、”PointB”、・・・などというように名前を付ける。
※今回はPointAからDの4つ作成
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-59.png)
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されない(移動可能にならない)
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-60.png)
3-2.以下のように選択して”Navigation”タブを表示する。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-61.png)
3-3.とりあえず設定はデフォルトのままで、”Bake”タブを選択して右下の”Bake”を押下
パソコンのスペックによっては”Bake”に時間がかかるので待つ。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-62.png)
3-4.Sceneタブを見て、”Navigation Static”にしたPlaneオブジェクトが青い枠で囲われていることを確認
この青い枠が、NavMeshAgentを使用して移動できる範囲
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-63.png)
4.巡回させるGameObjectの設定
4-1.Cubeに”Nav Mesh Agent”コンポーネントを追加
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-64.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-65.png)
4-2.”Nav Mesh Agent”コンポーネントの”Stopping Distance”プロパティの値を0.5に変更
※”Stopping Distance”プロパティが0だと目的地との距離が完全一致しないといけなくて、完全一致は難しい場合もあるので、ある程度近づけばよいということにする。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-66.png)
4-3.その一つ下の”Auto Braking”プロパティのチェックを外す。
※これは有効になっていると、目的地点の到着時にエージェントの移動速度が減速する。今回は巡回させるので、この設定は無効の方がスムーズな動きをする。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-67.png)
5.複数地点を巡回させるビジュアルスクリプトを作成
5-1.Cubeに”Script Machine”コンポーネントを追加
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-68.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-69.png)
5-2.以下のような変数を作成
※PatrolPointのValueの数は、2-3で作成した巡回させたい地点の数だけ作成
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-79.png)
5-3.作成した変数のValueに以下のように値を入れる。
PatrolPointリストには、PointAからDをそれぞれ入れる。
CurrentPatrolPointIndex変数は、0のままでよい。(この後、ビジュアルスクリプト内で現在の目的地(PatrolPointリストの何番目を目的地にしているか)を保存しておくために使用
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-80.png)
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-81.png)
5-4.”Graph”プロパティの”New”ボタンを押下
![](https://programming.sincoston.com/wp-content/uploads/2022/05/image-3.png)
5-5.ファイルの保存ダイアログが開かれるので任意の場所にPatrolという名前で保存する。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-82.png)
5-6.”Edit Graph”ボタンを押下して、以下のようにグラフを作成する。
![](https://programming.sincoston.com/wp-content/uploads/2022/06/image-83-1024x557.png)
完成
これでゲームをスタートするとCubeが指定した地点を巡回する。
コメント