c# - 使用 NavMesh (Unity) 寻找路径点

标签 c# unity-game-engine path-finding navmesh

我想制作一个简单的脚本,引导 NavMesh 代理到达各个路径点。我是Unity新手,所以我还不知道一些基本功能,而是用伪代码输入。

using UnityEngine;
using UnityEngine.AI;

public class Path_left_blue : MonoBehaviour {

    private Transform target;
    private int wavepointindex = 0;
    public NavMeshAgent agent;

    void Start () {
        target = Waypoints_blue_left.waypoints[0];
    }

    void Update () {
        //Set destination to waypoint
        Vector3 dir = target.position;
        agent.setDestination(dir);

        if (agent is within a close range/touching target waypoint)

            //Remove object if at the last waypoint
            if (wavepointindex == Waypoints_blue_left.waypoints.Length)
                Destroy(gameObject);

            wavepointindex++;
            target = Waypoints_blue_left.waypoints[wavepointindex];

    }
}

最佳答案

void Update() 函数每帧调用一次。因此,您需要一个函数来检查代理是否到达指定地点,并为其设置新的目的地。

我将您的代码更改为:

using UnityEngine;
using UnityEngine.AI;

public class Path_left_blue : MonoBehaviour 
{
    private Transform target;
    private int wavepointindex = -1;
    public NavMeshAgent agent;

    void Start () 
    {
        EnemyTowardNextPos();
    }

    void Update () 
    {
        // agent is within a close range/touching target waypoint
        if (!agent.pathPending && agent.remainingDistance < 0.5f)
        {
            EnemyTowardNextPos();
        }
    }

    void EnemyTowardNextPos ()
    {
        if(wavepointindex == Waypoints_blue_left.waypoints.Length - 1)
        {
            Destroy(gameObject);
        }
        else
        {
            // set destination to waypoint
            wavepointindex++;
            target = Waypoints_blue_left.waypoints[wavepointindex];
            agent.SetDestination(target);
        }
    }
}

EnemyTowardNextPos() 函数仅在代理到达当前点时调用。

希望对你有帮助

关于c# - 使用 NavMesh (Unity) 寻找路径点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073677/

相关文章:

ios - 在免费应用程序上将 Apple In App Purchases 的银行信息放在哪里

networking - IRC中的最短路径是如何保证的?

c# - Unity3D 的 OpenCV dll 调用导致 FPS 下降

c# - Datagridview 单元格值变化更新数据库

c# - Unity C# 输入系统获取任意键并获取按下的键名

java - 多线程 A* 寻路在自上而下游戏中卡住

algorithm - 如何找出敌人要遵循的草书路径

c# - 使用 MVVM Xamarin Forms 使用数据填充选择器

C#、HTTPClient - IfMatch 格式要求?

unity-game-engine - Unity 输入字段未设置更改值