簡體   English   中英

如何構建一個可以用獨立計時器生成 3 個敵人的波浪生成器?

[英]How to build a wave spawner that spawns 3 enemies with independent timers?

我目前正在 Unity 中構建 wave 基礎游戲,但目前陷入困境。 我的目標是讓 3 個敵人以不同的速度獨立生成。 我有一個大的 class 來管理 Waves,我在其中存儲數據,例如Enemy1Count (How many Enemy1 spawn)Enemy1Rate (At which rate they spawn) 我希望第一個敵人每 2 秒產生一次,第二個敵人每 3 秒產生一次,第三個敵人每 5 秒產生一次,但是如果沒有計時器相互影響,我就無法做到這一點。 你知道我怎么能解決這個問題嗎? (我想管理一個班級內 3 個敵人的所有數據)

這似乎是一個你絕對可以使用Unity Coroutines的問題,你應該能夠為每個敵人運行一個協程,這樣它就會在 X 時間后產生一波。

像這樣的東西應該適用於你的邏輯

Coroutine c1, c2,c3;
bool keepSpawningEnemies = true;
Start(){
        c1= StartCoroutine(SpawnWave(enemy1, 3.0f));
        c2= StartCoroutine(SpawnWave(enemy2, 10.0f));
        c3= StartCoroutine(SpawnWave(enmey3, 5.0f));

}

IEnumerator SpawnWave(Enemy enemy, float timeBetweenWaves)
{
   while(keepSpawningEnemies ) {
      SpawnWaveLogic(enemy);
      yield return new WaitForSeconds(timeBetweenWaves);
  }
}


Update() {

  // logic to check if we need to keep spawning
  // At some point you would run
  keepSpawningEnemies = false;

}

我認為最簡單的方法是創建一個只負責處理一個波的組件,然后將該組件的三個實例添加到場景中。

public class Spawner : MonoBehaviour
{
    [SerializeField] private Object prefab;
    [SerializeField] private float spawnInterval;

    private WaitForSeconds waitForNextSpawn;

    private void Awake() => waitForNextSpawn = new WaitForSeconds(spawnInterval);
    private void OnEnable() => StartCoroutine(SpawnLoop());
    private void OnDisable() => StopCoroutine(SpawnLoop());

    private IEnumerator SpawnLoop()
    {
        while(enabled)
        {
            yield return waitForNextSpawn;
            Instantiate(prefab);
        }
    }
}

暫無
暫無

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

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