0

I have a script which spawns enemies after a delay of time on a terrain that I have created. It works for the first three enemies created but when it adds the navmeshagent the fourth time it freezes the entire game.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class RandomSpawn : MonoBehaviour {
public List<GameObject> Spawnables;
public Terrain spawnLand;
public float spawnWait = 1f;
public int numPer = 1;
public bool enableSpawning =true;
float minx,maxx,minz,maxz,waiter = 1f;

// Use this for initialization
void Start () {
    minx = spawnLand.transform.position.x+2;
    maxx = spawnLand.terrainData.size.x + minx-4;
    minz = spawnLand.transform.position.z+2;
    maxz = spawnLand.terrainData.size.z + minz-4;
}
void Update(){
    waiter -= Time.deltaTime;
    if (waiter<=0) {
        waiter = spawnWait;
        if (enableSpawning) {
            Spawn ();
        }
    }
}
void Spawn()
{


    for (int i = 0; i < numPer; i++) {

        Vector3 loc = new Vector3 (Random.Range (minx, maxx), 0, Random.Range (minz, maxz));

        GameObject go = (GameObject)Instantiate (Spawnables[Random.Range (0,Spawnables.Count)],new Vector3(0,0,0),new Quaternion(0,0,0,0));

        NavMeshHit closestHit;
        if( NavMesh.SamplePosition( loc, out closestHit, 500, 1 ) ){
            go.transform.position = closestHit.position;
            go.AddComponent<NavMeshAgent>();
            //TODO
        }
        else{
            Debug.Log("...");
        }
    }
}
}

I put it on a time delay using waiter and spawnWait. It seems to always freeze and crash right after creating the fourth object and adding the navmeshagent to it. I have found out that it is probably from a rebake of the scene. Is there any way to stop it from freezeing or rebaking. Or is there a better way to spawn enemies in a set location with navmeshagents?

halfer
  • 19,824
  • 17
  • 99
  • 186
Mindstormer
  • 299
  • 3
  • 16
  • For me your script is working just fine. Try it with just one spawnable object (may be you have null object or going from array bounds). Debug it step by step. Try to put Spawn method into Coroutine process (https://docs.unity3d.com/Manual/Coroutines.html). – maximelian1986 Oct 22 '17 at 19:09
  • It works for multiple objects and spawns them 4 times before it freezes. I will check to see if maybe some other script is causing it to freeze and report back. @maximelian1986 – Mindstormer Oct 23 '17 at 00:43
  • @maximelian1986 Could you please post what you said above in an answer. You hit it on the head. Thank you so much :). I want to give you the points for it. – Mindstormer Oct 23 '17 at 00:56

1 Answers1

0

For me your script is working just fine. Try it with just one spawnable object (may be you have null object or going from array bounds). Debug it step by step. Try to put Spawn method into Coroutine process (docs.unity3d.com/Manual/Coroutines.html).

maximelian1986
  • 2,308
  • 1
  • 18
  • 32