Ejemplo n.º 1
0
    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]);
        }
    }
Ejemplo n.º 2
0
    /// <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;
            }
        }
    }