void Start() { InvokeRepeating("RespawnFromPool", 0f, TIME_BETWEEN_ASTEROID); _pool = new GameObject[OBJECT_POOL_SIZE]; for (int i = 0; i < OBJECT_POOL_SIZE; ++i) { _pool[i] = (GameObject)Instantiate(_asteroidPrefab, UtilBehaviour.GetRandomAsteroidPosition(), Random.rotation); _pool[i].name = "AsteroidPoolObject" + i; //Set delegate to call fragments when it is destoyed _pool[i].GetComponent <AsteroidBehaviour>()._delegate += new SpawnFragmentDelegate(SpawnFragment); //Random Vector3 velocity _pool[i].GetComponent <Rigidbody> ().velocity = new Vector3( Random.Range(-ASTEROID_VELOCITY, ASTEROID_VELOCITY) * 0.5f, 0f, Random.Range(-ASTEROID_VELOCITY, ASTEROID_VELOCITY) * 0.5f); _pool[i].SetActive(true); _pool[i].transform.parent = this.gameObject.transform; NetworkServer.Spawn(_pool[i]); } }
/// <summary> /// Method to respawn asteroid from pool. /// </summary> void RespawnFromPool() { foreach (GameObject obj in _pool) { if (!obj.activeInHierarchy) { obj.transform.position = UtilBehaviour.GetRandomAsteroidPosition(); obj.transform.rotation = Random.rotation; obj.transform.localScale = Vector3.one; obj.SetActive(true); NetworkServer.Spawn(obj); break; } } }