2016-08-10 6 views
1

ゲームが開始され、ランダムなスポーンポイントで敵がスポーンしたときに欲しい (私はゲームで3つのスポーンポイントを作った)ポイント。Unity2d:ランダムなスポーンポイントで敵が出現しない

どうしたのですか?

ここに私のコードです:

UnityEngineを使用しています。 using System.Collections;

public class WaveSpawner : MonoBehaviour { 

public enum Spawnstate {SPAWNING, WAITING, COUNTING }; 

[System.Serializable] 
public class Wave 
{ 
    public string name; 
    public Transform enemy; 
    public int count; 
    public float rate; 

} 

public Wave[] waves; 
private int nextWave = 0; 


public float timeBetweenWaves = 5f; 
public float waveCountdown; 

public Transform[] spawnPoints; 

private float searchCountdown = 1f; 

private Spawnstate state = Spawnstate.COUNTING; 

void Start() 
{ 
    if (spawnPoints.Length == 0) 
    { 
     Debug.LogError("No spawn points referenced"); 
    } 
    waveCountdown = timeBetweenWaves; 
} 

void Update() 
{ 
    if(state == Spawnstate.WAITING) 
    { 
     if(!EnemyIsAlive()) 
     { 
      WaveCompleted(); 
     } 
     else 
     { 
      return; 
     } 
    } 

    if(waveCountdown <= 0) 

    { 
     if(state != Spawnstate.SPAWNING) 
     { 
      StartCoroutine(SpawnWave(waves[nextWave])); 
     } 

    } 
    else 
    { 
     waveCountdown -= Time.deltaTime; 
    } 
} 

void WaveCompleted() 

{ 
    Debug.Log("Wave Completed!"); 

    state = Spawnstate.COUNTING; 
    waveCountdown = timeBetweenWaves; 

    if (nextWave + 1 > waves.Length - 1) 

    { 
     nextWave = 0; 
     Debug.Log("Completed all waves!"); 
    } 

    else 
    { 
     nextWave++; 
    } 



} 

bool EnemyIsAlive() 
{ 
    searchCountdown -= Time.deltaTime; 
    if (searchCountdown <= 0f) 
    { 
     searchCountdown = 1f; 
     if (GameObject.FindGameObjectWithTag("Enemy") == null) 
     { 
      return false; 
     } 
    } 
    return true; 
} 


IEnumerator SpawnWave(Wave _wave) 
{ 
    Debug.Log("Spawning Wave: " + _wave.name); 
    state = Spawnstate.SPAWNING; 

    for(int i = 0; i < _wave.count; i++) 
    { 
     SpawnEnemy(_wave.enemy); 
     yield return new WaitForSeconds(1f/ _wave.rate); 
    } 

    state = Spawnstate.WAITING; 


    yield break; 
} 

void SpawnEnemy(Transform _enemy) 

{ 
    Debug.Log("Spawning Enemy: " + _enemy.name); 


    Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length) ]; 
    Instantiate(_enemy, transform.position, transform.rotation); 

} 
} 

enter image description here

答えて

0

たぶんおかげで、それが機能するようになりました男

Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length-1) ]; 
Instantiate(_enemy, _sp.position, _sp.rotation); 
+0

のようなものに

Transform _sp = spawnPoints[ Random.Range (0, spawnPoints.Length) ]; Instantiate(_enemy, transform.position, transform.rotation); 

を変更してみてください! – JordiDragon

+2

問題ありません。 Rianによると、あなたのコードはIndOutOfRance Exceptを受けやすいものでした。 また、あなたが渡していた変換は、ランダムなスポーンポイント解析から返された変換ではありませんでした – MKougiouris

1

Random.Rangeので0〜5、包含範囲の値を返し、0と5

配列インデックスがゼロよう基づいており、5つの要素を持つ配列は0にしなければならない含むことができますあなたが呼び出すあなたSpawnEnemy方法でそう4.

spawnPoints[ Random.Range (0, spawnPoints.Length) ] 

Random.RangeがspawnPoints.Lengthの場合、失敗します。

spawnPoints[ Random.Range (0, spawnPoints.Length-1) ] 

にそれを変更すると、あなたの問題を修正する必要があります。

関連する問題