[Unity初学者,我在Unity中有一个随机的预制生成器附加到我的游戏中,该生成器随机生成3个预制体。问题是,有时我会连续获得5次相同的预制件。如何防止同一预制件连续产生两次?这是我的代码:
public class randomspawnscript : MonoBehaviour
{
public GameObject prefab1, prefab2, prefab3;
public float spawnRate = 2f;
float nextSpawn = 0f;
int whatToSpawn;
void Update()
{
if (collisionbutton.end != true || gameoverscreenrestart.restartPressed==true || gameovermainmenu.menuPressed==true)
{
if (Time.time > nextSpawn)
{
whatToSpawn = Random.Range(1, 4);
Debug.Log(whatToSpawn);
switch (whatToSpawn)
{
case 1:
Instantiate(prefab1, transform.position, Quaternion.identity);
break;
case 2:
Instantiate(prefab2, transform.position, Quaternion.identity);
break;
case 3:
Instantiate(prefab3, transform.position, Quaternion.identity);
break;
}
nextSpawn = Time.time + spawnRate;
}
}
else
{
return;
}
}
}
好吧,只需声明一下,即可将新的随机预制件与先前的随机预制件进行检查。对于惰性代码,您可以只
GameObject previousPrefab;
并且在随机化中,将previousPrefab设置为随机化的预制。
,然后在下一个随机化中,检查前一个Prefab == randomizedPrefab,如果是,再次随机。
^为了实现这样的目标,您还必须在Update()部分中创建一个方法,并在Update()中对其进行调用,因此,如果previousPrefab与随机化的对象相同,则可以再次调用该方法。
使用Unity的内置随机系统的简单方法是创建可能生成的数字的列表,然后从该列表中选择一个随机数,如下所示:
public class randomspawnscript : MonoBehaviour {
public GameObject prefab1, prefab2, prefab3;
public float spawnRate = 2f;
float nextSpawn = 0f;
int whatToSpawn;
private void Awake() {
// To not get a null ref error when generating the controlled random
// for the first time.
whatToSpawn = 0;
}
void Update() {
if (/* ... */) {
if (Time.time > nextSpawn) {
whatToSpawn = GetControlledRandom();
Debug.Log(whatToSpawn);
switch (whatToSpawn) {
//...
}
nextSpawn = Time.time + spawnRate;
}
} else {
return;
}
}
int GetControlledRandom() {
List<int> possibleChoices = new List<int> {
1, 2, 3
};
// Removes what was spawned before from the possible choices.
possibleChoices.Remove(whatToSpawn);
return possibleChoices[Random.Range(0, possibleChoices.Count)];
}
}
Alternative,更简单的方法是一直生成一个数字,直到获得满意的数字为止,例如:
int RetardedControlledRandom() {
int generatedNumber;
do {
generatedNumber = Random.Range(1, 4);
} while (generatedNumber == whatToSpawn);
return generatedNumber;
}
[This可以帮助您决定使用.NET提供的System.Random
。