NavMeshAgentを使って、プレーヤーを追いかける機能をつくりましょう。
AIによる自動追尾で、障害物を避けながら、プレーヤーめがけて追いかけてきます。
障害物をのぞいた移動範囲を検出するので、よりゲーム性の高い追尾が可能です。
関連記事:
NavMeshAgentで浮いてしまう場合の対処法
近づくと追いかけられる(NavMeshAgent)
マウスカーソルを追いかけるオブジェクト
3D空間でプレーヤーを追いかけるオブジェクト
ベイクできない場合の留意点
カメラを旋回しながら自動追従させる
ナビゲーションつくる
平面を作成して色をつけ、静的にチェックを入れます。
Cubeを作成し、位置とサイズを変更。静的にチェックを入れます。
Cubeにも色をつけます。
上から見ると、このように配置されています。
Cubeを複製してCube(1)を作成し、Y軸を90°回転します。
上から見ると、このように配置されています。
ナビゲーションウィンドウを追加します。
ナビゲーションのBakeボタンをクリックします。
上から見ると、このようにエージェントが表示されています。
プレーヤーの作成
続いて、プレーヤーを作成しましょう。
Cubeを作成し、名前をPlayerに変更します。
位置を変更して、リジッドボディを追加します。
上から見ると、このように配置されています。
PlayerMove.csを作成し、Playerに追加します。
PlayerMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { void Update() { if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, 0.05f); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, -0.05f); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-0.05f, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(0.05f, 0f, 0f); } } } |
十字キーで、プレーヤーを操作できるようになります。
NavMeshAgentの作成
続いて、追いかけてくる敵キャラを作成しましょう。
Sphereを作成して色を付け、位置を変更します。
上から見ると、このように配置されています。
EnemyMove.csを作成し、Sphereに追加します。
EnemyMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class EnemyMove : MonoBehaviour { NavMeshAgent agent; public GameObject target; void Start() { agent = GetComponent<NavMeshAgent>(); } void Update() { agent.destination = target.transform.position; } } |
using UnityEngine.AI; を忘れずに書いておきましょう。
ターゲットのフィールドに、Playerを入れます。
ナビメッシュエージェントを追加します。
コンポーネントを追加 > ナビゲーション > ナビメッシュエージェント
ゲームプレイして、プレーヤーを動かしてみましょう。
Sphereが、Playerを追いかけてきます。
関連記事:
NavMeshAgentで浮いてしまう場合の対処法
近づくと追いかけられる(NavMeshAgent)
マウスカーソルを追いかけるオブジェクト
3D空間でプレーヤーを追いかけるオブジェクト
ベイクできない場合の留意点
カメラを旋回しながら自動追従させる