2017-10-04 2 views
0

J'ai un problème où seul le premier NavMeshAgent peut être créé.Seul le premier NavMeshAgent peut être placé

D'abord, je choisis tous les équarrisseurs de maillage pour les objets cuire au four NavMesh:

enter image description here

Je peaufinées la cuire au four un peu il avait juste la bonne quantité de détails. Les lacunes noires autour des divers objets seraient plus si j'utilisé un plus grand rayon dans les options de l'agent de boulangerie:

enter image description here

J'ai deux reproducteurs placés de chaque côté de la rampe arrière (celle avec la sphère blanche dedans). Ceux-ci sont invisibles mais dans un script, NavMeshObjects sont placés sur ces emplacements sur un intervalle et leurs destinations sont définies sur l'un des autres objets de jeu.

Le premier fonctionne correctement, mais aucun des 17 autres NavMeshObjects de la file d'attente des géniteurs ne peut avoir ses destinations définies.

public class MinionSpawner : MonoBehaviour { 
    public void spawn (GameObject minion, GameObject target_position_obj) { 
     // Find the target position from the passed gameobject 
     MinionTargetPosition target_position = target_position_obj.GetComponent<MinionTargetPosition>(); 
     if (!target_position) { throw new System.Exception("no valid target position given"); } 
     // Instantiate the given minion at the spawner's origin point 
     GameObject new_minion = Object.Instantiate(minion, transform.position, new Quaternion(0,0,0,0)); 
     new_minion.SetActive(true); 
     // Mark the minion at it's target position, for lookup upon collision or elsewhere 
     MinionAttributes minion_attrs = new_minion.GetComponentInChildren<MinionAttributes>(true); 
     if (!minion_attrs) { throw new System.Exception("object passed as minion does not have MinionAttributes"); } 
     minion_attrs.target_position = target_position; 
     // Configure a NavMeshAgent to navigate the minion from origin to target position. 
     NavMeshAgent nav_mesh_agent = minion_attrs.gameObject.GetComponent<NavMeshAgent>(); 
     if (!nav_mesh_agent) { throw new System.Exception("minion doesn't have a nav mesh agent"); }; 
     nav_mesh_agent.Warp(transform.position); 
     // ================================================================ 
     // THIS LINE FAILS: 
     nav_mesh_agent.destination = target_position.transform.position; 
     // ================================================================ 
     // mark the minion's position as occupied in the turret's dictionary 
     Turret turret = target_position.turret; 
     turret.minion_slots[target_position] = true; 
     // set the minion's parent to the minion spawner, for organization's sake. 
     minion.transform.parent = transform; 
    } 
} 

Je reçois l'erreur "SetDestination" can only be called on an active agent that has been placed on a NavMesh. et je sais qu'il ya des questions là-bas à ce sujet. Mais j'ai essayé vraiment tout ce que j'ai trouvé suggéré, y compris la cuisson de NavMesh, la définition de la position initiale de NavMeshAgent avec Warp, et en s'assurant que les points sont sur le maillage.

Répondre

0

Le problème n'était pas lié au NavMeshagent. Ce fut cette ligne:

minion.transform.parent = transform; 

je avais besoin de changer pour:

new_minion.transform.parent = transform; 

Fondamentalement minion est l'objet qui est clonée et new_minion est le clone. Donc, si je mets le parent de minion, je suis en train de tout chambouler pour de futurs clones, je suppose.