团结:无法产生敌人波?

时间:2017-02-25 09:32:31

标签: c# unity3d

我正在建立一个生存射手,我正在使用我从另一个项目link获得的脚本,该脚本只产生第一波,然后没有任何反应。 它不会发出任何警告或任何错误

EnemyWave Script

public class WaveManager : MonoBehaviour {


PlayerHealth playerHealth;   
public float bufferDistance = 200;
public float timeBetweenWaves = 5f;
public float spawnTime = 3f;
public int startingWave = 1;
public int startingDifficulty = 1;
public Text number; 
[HideInInspector]
public int enemiesAlive = 0;


[System.Serializable]
public class Wave {
    public Entry[] entries;

    [System.Serializable]
    public class Entry { 

        public GameObject enemy;

        public int count;
        [System.NonSerialized]
        public int spawned;
    }
}

// All our waves.
public Wave[] waves;

Vector3 spawnPosition = Vector3.zero;
int waveNumber;
float timer; 
Wave currentWave;
int spawnedThisWave = 0;
int totalToSpawnForWave;
bool shouldSpawn = false;
int difficulty;

void Start() {

    playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
    waveNumber = startingWave > 0 ? startingWave - 1 : 0;
    difficulty = startingDifficulty;

    StartCoroutine("StartNextWave");
}

void Update() {

    if (!shouldSpawn) {
        return;
    }

    if (spawnedThisWave == totalToSpawnForWave && enemiesAlive == 0) {
        StartCoroutine("StartNextWave");
        return;
    }

    timer += Time.deltaTime;

    if (timer >= spawnTime) {

        foreach (Wave.Entry entry in currentWave.entries) {
            if (entry.spawned < (entry.count * difficulty)) {
                Spawn(entry);
            }
        }
    }
}

IEnumerator StartNextWave() {
    shouldSpawn = false;

    yield return new WaitForSeconds(timeBetweenWaves);

    if (waveNumber == waves.Length) {
        waveNumber = 0;
        difficulty++;
    }

    currentWave = waves[waveNumber];

    totalToSpawnForWave = 0;
    foreach (Wave.Entry entry in currentWave.entries) {
        totalToSpawnForWave += (entry.count * difficulty);
    }

    spawnedThisWave = 0;
    shouldSpawn = true;

    waveNumber++;

    number.text = (waveNumber + ((difficulty - 1) * waves.Length)).ToString();
    number.GetComponent<Animation>().Play();
}


void Spawn(Wave.Entry entry) {

    timer = 0f;

    if (playerHealth.currentHealth <= 0f) {
        return;
    }

    Vector3 randomPosition = Random.insideUnitSphere * 10;
    randomPosition.y = 0;

    UnityEngine.AI.NavMeshHit hit;
    if (!UnityEngine.AI.NavMesh.SamplePosition(randomPosition, out hit, 5, 1)) {
        return;
    }

    spawnPosition = hit.position;

    Vector3 screenPos = Camera.main.WorldToScreenPoint(spawnPosition);
    if ((screenPos.x > -bufferDistance && screenPos.x < (Screen.width + bufferDistance)) && 
        (screenPos.y > -bufferDistance && screenPos.y < (Screen.height + bufferDistance))) 
    {
        return;
    }

    GameObject enemy =  Instantiate(entry.enemy, spawnPosition, Quaternion.identity) as GameObject;

    enemy.GetComponent<EnemyHealth>().startingHealth *= difficulty;
    enemy.GetComponent<EnemyHealth>().scoreValue *= difficulty;

    entry.spawned++;
    spawnedThisWave++;
    enemiesAlive++;
}}

0 个答案:

没有答案