Согласно вашему комментарию:
он делает это в первую очередь, затем, когда он достигает первого пункта назначения останавливается и больше не идет к игроку
Мне кажется, что не обновляется позиция игрока.Таким образом, враг проверяет положение игрока только тогда, когда он проснулся, и просто перемещается в это место, затем он прекращает перепроверку.
Попробуйте следующее и дайте нам знать, как оно идет.Единственное отличие состоит в том, что вместо ссылки на плеер в редакторе, он связан с кодом внутри бодрствующего.Я использовал его сам, и он работал нормально.
using UnityEngine;
using System.Collections;
public class Slime: MonoBehaviour
{
Transform player; // Ref to the player's position.
NavMeshAgent nav; // Ref to the nav mesh agent.
void Awake ()
{
// Set up the references.
player = GameObject.FindGameObjectWithTag ("Player").transform;
nav = GetComponent <NavMeshAgent> ();
}
void Update ()
{
//Here it would be nice to add a stop condition, like when the player is dead or when it is out of range
ChasePlayer();
}
void ChasePlayer() {
nav.SetDestination (player.position);
Debug.Log ("Chasing player");
}
}
Я использовал следующий учебник в качестве ссылки:
https://unity3d.com/learn/tutorials/projects/survival-shooter/enemy-one?playlist=17144
Из комментариев в вопросеПервоначально я вижу, что вы пытались установить диапазон действия, который вызовет противника.Ниже я даю вам возможный подход для расчета расстояния между двумя объектами GameObject, который вы можете добавить в Update ():
float dist = Vector3.Distance(player.position, transform.position)
if(dist < 10.0)
{
ChasePlayer();
}
Для справки: https://docs.unity3d.com/ScriptReference/Vector3.Distance.html