【Unity】(Version: 2022.2以降)NavMeshで敵がプレイヤーを追いかけるようにする方法
※Unityのナビゲーションシステム(Bakeのやり方等)はVersion: 2022.2以降ではやり方が変わったので、新しいやり方を紹介します。
Version: 2022.1以前を使っている方は以下を見てください。
Version: 2022.2以降では以下の画像のNavMeshのBake時に使う必要があった"Navgation Static"が選択できなくなっています。Staticの設定は不要になりました。
Bakeの方法が変更になっています。
では早速最新のやり方で敵がプレイヤーを追いかけるようにしてみよう。
プレイヤーとしては以下を使います。
- 1. 完成動作
- 2. 作り方(動画)
- 3. 作り方(ブログ)
- 3.1. 敵を作る
- 3.2. 各GameObjectを配置
- 3.3. AI Navigationをインストール(Version: 2022.2以降の変更点)
- 3.4. NavMesh Surfaceを配置(Bake機能を持つゲームオブジェクトを作成)(Version: 2022.2以降の変更点)
- 3.5. 障害物としたいゲームオブジェクトにNavMesh Obstacleコンポーネントをアタッチ(Version: 2022.2以降の変更点)
- 3.6. Bakeする(Version: 2022.2以降の変更点)
- 3.7. 敵にNavMeshAgentをアタッチする
- 3.8. 敵がプレイヤーを追いかけるようにするスクリプトを作成
- 3.9. 実行
完成動作
作り方(動画)
作り方(ブログ)
敵を作る
1.「Asset Store」から敵をインポートする(今回は例として「Level 1 Monster Pack」をインポート)
2.ステージに敵のPrefabを置く。
※この敵はデフォルトでは小さすぎるので、Scaleを調整する。今回は各Scaleを30にした。
※影がないので表示したい場合は、Hierarchyの以下のLV1をクリックして、
Inspectorウィンドウの以下のShaderの値を"Standard"にする。
各GameObjectを配置
1.最終的に以下の画像のように配置する(プレイヤーとしては「Asset Store」から無料で入手できる「Unity-Chan! Model」を使用
AI Navigationをインストール(Version: 2022.2以降の変更点)
Version: 2022.2以降はAI Navigationのインストールが必要になった
1.Window→Package Managerを選択
2.PakagesをUnity Registryにする
3.右上の検索窓で"AI Navigation"と入力し、AI NavigationをInstallする。
4.Pakage Managerを閉じる
NavMesh Surfaceを配置(Bake機能を持つゲームオブジェクトを作成)(Version: 2022.2以降の変更点)
1.Hierarchyタブで以下のように選択し、NavMesh Surfaceのゲームオブジェクトを作成
2.NavMeshSurfaceコンポーネントがアタッチされたゲームオブジェクトが作成される。
※NavMeshSurfaceコンポーネントがBake機能を持っています。
3.設定をいじるためにNavigationタブが必要であれば、以下のようにして表示(今回は設定はいじりません)
障害物としたいゲームオブジェクトにNavMesh Obstacleコンポーネントをアタッチ(Version: 2022.2以降の変更点)
1.今回は赤いCube(CubeとCube(1))を障害物としたいので、その二つにNavMesh Obstacleコンポーネントをアタッチ
※NavMesh ObstacleコンポーネントのCarveプロパティにチェックを入れるといい感じで障害物の周りに穴(NavMesh Agentが通れない場所)を作ってくれる
Bakeする(Version: 2022.2以降の変更点)
1.NavMesh SurfaceオブジェクトのNavMeshSurfaceコンポーネントのBakeボタンを押下
2.以前のバージョンと同じように見慣れた形になる(NavMesh Agentが動ける範囲が青色で表示される。)
ここまでくれば、あとは以前のバージョンと変わりません。
敵にNavMeshAgentをアタッチする
NavMeshAgentをアタッチされた敵は、NavMeshでBakeした範囲の中を移動しながら目的地に行くようになる。
1.敵を選択し、Inspectorウィンドウで"Add Component"ボタンを押下して、"Nav Mesh Agent"を追加
“Nav Mesh Agent"の設定値を変えれば、移動速度や障害物回避精度を変えれるが割愛
敵がプレイヤーを追いかけるようにするスクリプトを作成
敵がプレイヤーを追いかけるようにするためのスクリプトを作成して、敵にアタッチします。
1.目的地(プレイヤ―の場所)を指定するスクリプトを作成。ファイル名はEnemyMove.csとする。
2.ソースは以下
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class EnemyMove : MonoBehaviour
{
[SerializeField]
[Tooltip("追いかける対象")]
private GameObject player;
private NavMeshAgent navMeshAgent;
// Start is called before the first frame update
void Start()
{
// NavMeshAgentを保持しておく
navMeshAgent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update()
{
// プレイヤーを目指して進む
navMeshAgent.destination = player.transform.position;
}
}
3.EnemyMove.csを敵にアタッチする。
敵を選択する
EnemyMove.csをドラックアンドドロップでアタッチ
4.敵が追いかける対象のGameObject(今回はunitychan)をPlayerプロパティに入れる。
実行
これで実行すると、敵がプレイヤーを追いかけるようになる。
ディスカッション
コメント一覧
まだ、コメントがありません