如何在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
}
}
}
希望这有助于!