Поиск пути к путевым точкам с помощью NavMesh (Unity)
Я хочу сделать простой скрипт, который направляет агента 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 ответ
Решение
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()
функция вызывается только когда агент прибывает в текущую точку.
Я надеюсь, что это поможет вам