簡體   English   中英

在 TowerDefence Code 中,用於生成敵人

[英]in TowerDefence Code,for spawning enemies

我想在同一個敵人波中產生多個敵人,也許有人可以幫助......在 C# 的新手中。

這就是現在使用的代碼:

public class WaveSpawner_2 : MonoBehaviour
{

public static int EnemiesAlive = 0;

 public Wave2[] waves;
 public Transform spawnPoint;
 public float timeBetweenWaves = 5f;

[SerializeField] TextMeshProUGUI waveCountDownText;

public GameManager gameManager;

       float countDown = 2f;
        
        int waveIndex = 0;

 void Start() 
 {
   EnemiesAlive = 0;  
 }

 private void Update() 
 {
    
    if(EnemiesAlive > 0)
    {
      return;
    }
    
    if (waveIndex == waves.Length)
        {
       gameManager.WinLevel();
         this.enabled = false;
        }
            
    if(countDown <= 0f)
    {
       StartCoroutine(SpawnWave());
       countDown = timeBetweenWaves;
       return;
    }
    
    countDown -= Time.deltaTime;
    countDown = Mathf.Clamp(countDown, 0f, Mathf.Infinity);
    waveCountDownText.text = string.Format("{0:00.00}", countDown);
  }
 
   IEnumerator SpawnWave ()
    {
        PlayerStats.Rounds++;
      Wave2 wave = waves[waveIndex];
      EnemiesAlive = wave.count;
        for (int i = 0; i < wave.count; i++)
        {
            SpawnEnemy(wave.enemy);
            yield return new WaitForSeconds(1f / wave.rate);
        }
        waveIndex++;
    }   
    void SpawnEnemy(GameObject enemy)
    {
       Instantiate(enemy, spawnPoint.position, spawnPoint.rotation);
       EnemiesAlive++;
    }
  

}

這就是第二個 class:

[System.Serializable]
public class Wave2
{
  [Header("DeafultEnemy")]
  public GameObject enemy;
  public int count;
  public float rate;

  
}

我一直在尋找 2 天的解決方案,但找不到一個..我是 c# 的新手,所以也許我確實找到了它但不明白......在這里試試運氣,謝謝。

我不確定在同一波產生多個敵人是什么意思,對於代碼來說,它看起來像你每隔幾個游戲時間就產生一個敵人,如果是這樣,為什么不調用 SpawnEnemy 來實例化多個敵人?

實現此目標的最簡單方法是將 Wave2 內部的 GameObject 敵人更改為數組。

[Serializable]
public class WaveData
{
    public GameObject[] prefabs;
    public int count;
    public float rate;
}

然后在 SpawnWave 內部,您可以使用 prefabs 數組來獲取隨機的 prefab、在 prefab 之間交替或其他一些挑選算法。

for (int i = 0; i < wave.count; i++)
{
    // Getting a random enemy
    var enemyToSpawn = wave.prefabs[Random.Range(0, wave.prefabs.Length)];
    SpawnEnemy(enemyToSpawn);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM