using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.AI;
public class NavigateAgent : MonoBehaviour
{
public List<Transform> points = new List<Transform>();
public List<GameObject> npcs;
public NavMeshAgent agent;
private int destPoint = 0;
void Start()
{
var wayPoints = GameObject.FindGameObjectsWithTag("Waypoint");
foreach (GameObject waypoint in wayPoints)
{
points.Add(waypoint.transform);
}
npcs = GameObject.FindGameObjectsWithTag("Npc").ToList();
//agent = GetComponent<NavMeshAgent>();
// Disabling auto-braking allows for continuous movement
// between points (ie, the agent doesn't slow down as it
// approaches a destination point).
agent.autoBraking = false;
GotoNextPoint();
}
void GotoNextPoint()
{
// Returns if no points have been set up
if (points.Count == 0)
return;
// Set the agent to go to the currently selected destination.
agent.destination = points[destPoint].position;
// Choose the next point in the array as the destination,
// cycling to the start if necessary.
destPoint = (destPoint + 1) % points.Count;
}
void VisitNpcs()
{
var npc = npcs[Random.Range(0, npcs.Count)];
var distance = Vector3.Distance(npc.transform.position, agent.transform.position);
if (distance < 3f)
{
// Stop slowly agent.
// Rotate agent and the npc at the same time slowly smooth to face each other.
}
}
void Update()
{
// Choose the next destination point when the agent gets
// close to the current one.
if (!agent.pathPending && agent.remainingDistance < 0.5f)
GotoNextPoint();
}
}
Если агент при перемещении между путевыми точками находится на расстоянии меньше 3 от одного из случайно выбранных npcs, медленно остановите агента, но достаточно быстро, чтобы не пройти расстояние np c меньше 3, то оба np c и агент должны плавно вращаться лицом друг к другу.
После того, как части вращения закончились и они повернуты лицом друг к другу, сделайте что-нибудь. После того, как эта часть «Сделай что-нибудь» будет закончена, заставьте агента плавно повернуться назад лицом к тому месту, где он был, а затем переместите его снова, чтобы продолжить перемещение путевых точек. Я хочу остановить его и повернуть .... но это больше похоже на паузу, агент вращает, делает что-то, а затем продолжает движение между путевыми точками.
Каждый раз, когда агент посещает np c, называйте это паузой агент. Лог c - приостановить агент и продолжить.