Question by 
               Varimathras · Oct 01, 2016 at 12:14 PM · 
                instantiatespawnnavmeshnavmeshagenttranform.position  
              
 
              Set Destination can only be called on an active agent, problem when instanciating.
I am trying to spawn soldiers and move them as a regiment via mouse clicks on a nav mesh. But i get the ""Set Destination" can only be called on an active agent" error. I read in the forums that this can be caused by instantiating to high or low from the nav mesh. But wherever i put the spawnpoint on the y axis, nothing changes. I usually spawn them on Y = 0 It seems Unity sets my prefab clones autmatically to y = 0.303... i dont't know why. I can't move the soldiers on the y-axis on runtime in the scene view. Another "fun" thing that happens is that my awake funktion where i use GetComponent doesn't get called when i instantiate. I have to call it in a separate function.
 public class Move : MonoBehaviour
 {
     private Ray _ray;
     private RaycastHit hit;
     private float raycastLength = 1000.0f;
     private UnitMove nav;
 
     public static List<GameObject> selectedUnits = new List<GameObject>();
 
     void Update ()
     {
         _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         if (Input.GetMouseButtonDown(0))
         {
             if (Physics.Raycast(_ray, out hit, raycastLength))
             {
                 MoveRegiment(hit.point);
             }
         }
     }
 
     void MoveRegiment(Vector3 moveToPos)
     {
         foreach (GameObject go in selectedUnits)
         {      
             nav = go.GetComponent<UnitMove>();
             nav.setNav();
             nav.MovetoNav(moveToPos.x, moveToPos.y, moveToPos.z);
         } 
     }
 }
 
 public class UnitMove : MonoBehaviour
 {
     private NavMeshAgent nav;
     public int xPos { get; set; }
     public int yPos { get; set; }
 
     void Awake()
     {
       nav = GetComponent<NavMeshAgent>(); //does not get called
     }
 
    public void setNav()
     {
         nav = GetComponent<NavMeshAgent>();
     }
    public void MovetoNav(float x, float y, float z)
     {
         nav.SetDestination(new Vector3(x , y, z));
     }
 }
 public class RegimentSpwan : MonoBehaviour
 {
     public Text row;
     public Text unitAmmount;
     public GameObject Unit;
 
     private GameObject _newGO;
     private Vector3 pos;
 
     public void OnclickNewRegiment()
     {
         DestroyImmediate(GameObject.Find("Regiment"));
 
         _newGO = new GameObject("Regiment");
         Instantiate(_newGO, this.transform.position, Quaternion.identity);
 
         for (int i = 0; i < Convert.ToInt16(row.text); i++)
         {
             for (int j = 0; j < Convert.ToInt16(unitAmmount.text); j++)
             {
                 Debug.Log(this.transform.position.y); //is zero
                 Unit.name = "Unit_" + i + "_" + j;
                 pos = new Vector3(this.transform.position.x + j * 2,this.transform.position.y, this.transform.position.z + i * 2);
                 Instantiate(Unit, pos, Quaternion.identity, _newGO.transform);
                 Move.selectedUnits.Add(Unit); //list of gameobjects
 
             }
         }
 
     }
 }
 
 
              
               Comment
              
 
               
              Your answer