最初に効果を表示します。
敵の自動パトロールの実現には、unity に付属の Nav Mesh Agent (ナビゲーション グリッド エージェント) を使用できます。冗長なコード量を節約しながら、この機能を便利に実現できます。
最初に Nav Mesh Agent コンポーネントを敵に追加します。
https://docs.unity.cn/cn/2018.4/Manual/class-NavMeshAgent.html
上記はunityの公式マニュアルでのこのコンポーネントの詳細な紹介です. ここでより重要なものは、速度(移動速度)、角速度(回転速度)、および停止距離(ターゲットに近づいたときに停止する)です.距離). これらの 3 つの値は、独自のニーズに応じて設定する必要があります. 残りはデフォルトのままにすることができます.
次はコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class AIFindWay : MonoBehaviour
{
public NavMeshAgent agent;
public Transform[] Points;//通过数组形式可设置多个监测点
int currentPoint;
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.SetDestination(Points[0].position);//通过Nav Mesh Agent组件的SetDestination 方法括号内为一个Vector3目标点
}
void Update()
{
if(agent.remainingDistance<agent.stoppingDistance)//到目标的剩余距离是否小于之前在 Inspector窗口中设置的停止距离
{
currentPoint=(currentPoint+1)%Points.Length;//采用取余的方法实现敌人巡逻轨迹的循环
agent.SetDestination(Points[currentPoint].position);
}
}
}
スクリプトをキャラクターに追加し、Nev Mesh Agent をエージェントにドラッグします。
そして、2 つの Point ポイントを追加し、Hierarchy パネルに 2 つの空のオブジェクトを追加して、それらに pos1、pos2 という名前を付け、簡単に配置できるようにラベルを付けます。
ここでも注意が必要です。pos1 と pos2 の Y 軸の値は、地面の Y 軸にできるだけ近づける必要があります。そうしないと、ナビゲーション中にキャラクターがさまよってしまいます。ここで疑問が残るかもしれませんが、敵の携帯スクリプトですか?? このコンポーネントを使用すると、移動スクリプトを記述する必要がなく、移動の速度とステアリングをコンポーネントで設定できます.ここでは、移動アニメーション付きの敵を追加するだけです. 走ると、
「GetRemainingDistance」は、NavMesh に配置されたアクティブなエージェントでのみ呼び出すことができます。
この紛らわしい間違いは、NavMesh の動的ベイクの概念を導入する必要があります. まず、作成されたすべての地形と環境オブジェクト (衝突あり) を Environment という名前の空のオブジェクトに保存し、次の操作を同時に実行します。
インスペクターで Static をプルダウンし、Navigation Static を選択します。
次に Window->AI->Navigation をクリックすると、次のパネルが表示されます。
Agent Radius (グリッドと地形の端の間の距離)
エージェントの高さ (通過できる最大の高さ)
Max Slope(通過できる最大の勾配)
step Height (通過できる最大勾配)
Drop Height (許容落下距離) Jump Height (許容ジャンプ距離)
通常、デフォルト値を使用し、Bake をクリックしてベイクすると、次のように表示されます。
敵哨戒機能が完成したので、動かしてみましょう。