- Home /
NavMeshAgent Teleporting when SetDestination called
I am having an issue with my NavMeshAgent teleporting when a new "SetDestination function is called". I am attempting to have my agent walk to a random point within the nav mesh. I am observing the agent teleporting to it's destination instead of translating there at the set speed.
I am using Unity 5.0 beta 18 release but I haven't seen any reported bugs or answers about that being the issue.
Here is the script I am using to set a new random destination
using UnityEngine;
using System.Collections;
public class PetPathing : MonoBehaviour {
private NavMeshAgent agent;
private Transform targetPoint;
private Transform destination;
private float timer;
// Use this for initialization
void Start () {
agent = gameObject.GetComponent<NavMeshAgent>();
destination = gameObject.transform;
targetPoint = setNewDestination();
agent.SetDestination(targetPoint.position);
timer = 0f;
Debug.Log(string.Format("New destination has been set at {0}", targetPoint.position));
}
// Update is called once per frame
void Update () {
timer += Time.deltaTime;
Pathing();
Debug.Log(agent.updatePosition);
}
private void Pathing()
{
if (timer > 5.0f)
{
targetPoint = setNewDestination();
agent.destination = targetPoint.position;
timer = 0f;
Debug.Log(string.Format("New destination has been set at {0}", targetPoint.position));
}
}
private Transform setNewDestination()
{
destination.position = new Vector3(Random.Range(-6f, 6f), 0, Random.Range(-6f, 6f));
return destination;
}
}
I have tried re-baking the navmesh as well as setting the agent's speed and acceleration to very low values.
Any help with this would be extremely appreciated.
Answer by ashleyjlive · Feb 16, 2015 at 11:01 AM
After some time, I managed to narrow the issue down to the fact that destination is a Transform, not a Vector3. I edited your code to make it do what I believe you want it to do :) If this doesn't work, please let me know.
Be sure to revert your NavMeshAgent speeds and stuff in the editor.
using UnityEngine; using System.Collections;
public class PetPathing: MonoBehaviour {
NavMeshAgent agent;
Vector3 targetPoint;
void Awake ()
{
agent = GetComponent<NavMeshAgent>();
setNewDestination();
agent.SetDestination(targetPoint);
StartCoroutine(Pathing());
}
IEnumerator Pathing ()
{
agent.SetDestination(targetPoint);
setNewDestination();
yield return new WaitForSeconds(5f);
StartCoroutine(Pathing());
}
void setNewDestination ()
{
targetPoint = new Vector3(Random.Range(-6f, 6f), 0, Random.Range(-6f, 6f));
}
}