如何在Unity中的特定时间启动和停止产卵器

问题描述:

我正在尝试制作一个无尽的2D游戏。我想为我的比赛使用3-4个产卵者。我的问题是我无法为我的产卵者设定一个特定的时间。如何在Unity中的特定时间启动和停止产卵器

游戏开始后
第一个产卵者将在5秒后开始产卵并在15秒后停止,并且它不会再次开启。

第二个产卵者将在15秒后开始产卵并在25秒后停止,并且它不会再次开启。

第三个产卵者将在25秒后开始产卵并在40秒后停止产卵,并且不会再次开启。

我想为它们全部使用相同的spawner脚本。我想我需要一些公共价值。

这里是我的产卵代码:

using UnityEngine; 
using System.Collections;  

public class RandomSpawner : MonoBehaviour 
{ 
    bool isSpawning = false; 
    public float minTime = 5.0f; 
    public float maxTime = 15.0f; 
    public Transform[] spawnPoints; 
    public GameObject[] enemies; 

    IEnumerator SpawnObject(int index, float seconds) 
    { 
     Debug.Log("Waiting for " + seconds + " seconds"); 
     int spawnPointIndex = Random.Range(0, spawnPoints.Length); 

     yield return new WaitForSeconds(seconds); 
     Instantiate(enemies[index], spawnPoints[spawnPointIndex].position, transform.rotation); 

     isSpawning = false;    
    } 

    void Update() 
    { 
     if (!isSpawning) 
     { 
      isSpawning = true; 
      int konumIndex = Random.Range(0, enemies.Length); 
      StartCoroutine(SpawnObject(konumIndex, Random.Range(minTime, maxTime))); 
     } 
    } 
} 

使用内置InvokeRepeating方法,您需要根据您的游戏进行修改。我已经使用了这种事情 https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html

一种选择是要测试的Time.realtimeSinceStartup,让你一秒钟的数量,因为在比赛开始:

if (Time.realtimeSinceStartup >= minTime && Time.realtimeSinceStartup <= maxTime) { 
    //spawn stuff 
} 

这可能是足够的,但一还有一点需要注意的是,如果你的游戏开始的时间不是完全正确的参考点(例如,如果你首先有一个主菜单,那么你创建的spawner的场景可能会在游戏开始后很长时间开始),那么你可能需要存储一个当产卵者是......呃产生时的参考时间。例如:

public class RandomSpawner : MonoBehaviour { 
    float objectStartTime; 
    void Start() { 
     objectStartTime = Time.realtimeSinceStartup; 
    } 

    void Update() { 
     var timeSinceObjectStart = Time.realtimeSinceStartup - objectStartTime; 
     if (timeSinceObjectStart > minTime && timeSinceObjectStart < maxTime) { 
     //spawn stuff 
     } 
    } 
} 

希望这有助于!