2014-12-08 3 views
0

Я разрабатываю игру, в которой я хочу порождать волны врагов. В каждой волне врагов я появляюсь из другой точки искры. Например, у меня есть 6 очков Spawn, первая волна врагов появляется с 4-й точки, вторая волна нерестится с 1-й точки и т. Д.Нерестительные волны врагов Unity3D

Я написал код, который позволяет мне порождать волны врагов, но моя проблема заключается в том, что он порождает волны врагов со всех 6 точек появления в первой волне врагов.

Когда я нажимаю на игру, у меня есть волны врагов из 6 зон появления не из одной точки появления для каждой волны.

using UnityEngine; 
using System.Collections; 

public class Waves : MonoBehaviour 
{ 
public GameObject Enemy = null; 

public int hazardCount = 3; 
public float spawnWait=0.5f; 
public float startWait=1; 
public float waveWait=4;    
public Transform[] spawnPoints; 

void Start() 
{ 
    StartCoroutine(SpawnWaves()); 
} 

IEnumerator SpawnWaves() 
{ 
    yield return new WaitForSeconds (startWait); 
    while (true) 
    { 
     for (int i = 0; i < hazardCount; i++) 
     { 
      int spawnPointIndex = Random.Range (0, spawnPoints.Length); 

      Instantiate (Enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 

      yield return new WaitForSeconds (spawnWait); 
     } 
     yield return new WaitForSeconds (waveWait); 
    } 
} 
} 

ответ

0

Поскольку spawnPointIndex выбирается внутри цикла, он выбирает новую случайную точку появления для каждой опасности в волне. Если вы хотите использовать один и тот же спавнпоинт затем выбрать spawnPointIndex вне цикла опасности, но внутри волн в то время (правда) цикл:

IEnumerator SpawnWaves() 
{ 
    yield return new WaitForSeconds (startWait); 
    while (true) 
    { 
     // Only pick a new spawn point once per wave 
     int spawnPointIndex = Random.Range (0, spawnPoints.Length); 

     for (int i = 0; i < hazardCount; i++) 
     { 
      // here would pick a new spawn point for each new enemy 
      Instantiate (Enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); 

      yield return new WaitForSeconds (spawnWait); 
     } 
     yield return new WaitForSeconds (waveWait); 
    } 
} 

также рассмотреть потянув враг из объекта пула, а не Instantiate новых каждый время. Это будет намного более эффективно. См. http://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling

Смежные вопросы