- Home /
Buggy movement for navmeshagent
I have done research on this topic but cant find any way to fix this. My navmeshagent looks fine when my player isn't moving but when he starts to move the ai starts lagging. I have read that this is something to do with which Update() I use for the ai and my camera follow. No combination seems to work. My Code: public Transform player;
public NavMeshAgent agent;
[Header("Bools")]
public bool canSee = false;
public bool justLost = false;
bool searching = false;
[Header("Vectors")]
Vector3 wanderPoint;
[Header("Seeing Properties")]
RaycastHit hit;
float distance;
float angle;
float searchTimer = 90;
private void Start()
{
}
private void Update()
{
distance = Vector3.Distance(transform.position, player.transform.position);
angle = Vector3.Angle(transform.forward, player.transform.position - transform.position);
if (Physics.Linecast(transform.position, player.transform.position, out hit) && hit.transform.tag == "Player" && distance <= 25 && angle <= 75)
{
searching = false;
searchTimer = 90;
canSee = true;
}
else
{
if (canSee == true)
{
justLost = true;
canSee = false;
searching = true;
}
}
if (canSee == true)
{
agent.SetDestination(player.position);
}
else if (searching)
{
searchTimer -= 1 * Time.deltaTime;
if (justLost == true)
{
wanderPoint = RandomNavSphere(transform.position, 5, -1);
agent.SetDestination(wanderPoint);
justLost = false;
}
if (agent.remainingDistance <= agent.stoppingDistance)
{
print("testing");
wanderPoint = RandomNavSphere(transform.position, 5, -1);
agent.SetDestination(wanderPoint);
justLost = false;
}
}
else
{
//patrol system here
}
if (searchTimer <= 0)
{
searching = false;
searchTimer = 90;
}
}
void CantSee ()
{
canSee = false;
justLost = true;
}
public static Vector3 RandomNavSphere(Vector3 origin, float dist, int layermask)
{
Vector3 randDirection = Random.insideUnitSphere * dist;
randDirection += origin;
NavMeshHit navHit;
NavMesh.SamplePosition(randDirection, out navHit, dist, layermask);
return navHit.position;
}
}
The first part is if he sees the player, then if he does follow. If he just lost the player he searched for 90 seconds. The bottom method is just a random movement. Any help is greatly appreciated.
Your answer
Follow this Question
Related Questions
Manual OffMeshLink Max Distance? 1 Answer
Get NavMeshAgent to look where it's going 0 Answers
Problem with "Bake" (Navigation) 1 Answer
NavMeshAgent occasionally makes stale paths 0 Answers
Update SetDestination only every 0.2s with coroutines ? 5 Answers