Поиск пути к путевым точкам с помощью NavMesh (Unity) - PullRequest
0 голосов
/ 29 августа 2018

Я хочу сделать простой скрипт, который направляет агента 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];

    }
}

1 Ответ

0 голосов
/ 29 августа 2018

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() функция вызывается только когда агент прибывает в текущую точку.

Надеюсь, это поможет вам

...