Unity3d は、Nav Mesh Agent コンポーネントを介して敵のパトロールを実現し、「SetDestination」エラー報告の問題を解決します

最初に効果を表示します。

敵の自動パトロールの実現には、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 をクリックしてベイクすると、次のように表示されます。

 敵哨戒機能が完成したので、動かしてみましょう。

おすすめ

転載: blog.csdn.net/m0_64652083/article/details/128944308