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

时间:2017-08-02 11:12:31

标签: c# unity3d 2d

我正在尝试制作无尽的2D游戏。我想为我的游戏使用3-4个产卵者。我的问题是我无法为我的产卵者设定一个特定的时间。

比赛开始后 第一个产卵者将在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)));
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用内置 InvokeRepeating 方法,您需要根据您的游戏进行编辑。 https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html

答案 1 :(得分:0)

我用过这种方法的一个选项是测试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
         }
    }
}

希望这有帮助!