我正在尝试制作无尽的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)));
}
}
}
答案 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
}
}
}
希望这有帮助!