Wie kann man in Unity machen das zufällig viele objects fehlen?
Code:
public class levelgeneration : MonoBehaviour
{
public Transform[] spawnpointss;
public GameObject[] objects;
// public Transform spawmpointonly;
// public GameObject objec;
public int zahlwenigerobiekte = 2;
public void Start()
{
int randomIndex = Random.Range(0, spawnpointss.Length);
for (int i = 0; i < spawnpointss.Length; i++)
{
int rand = Random.Range(0, objects.Length);
if (randomIndex != i)
{
Debug.Log(randomIndex);
Instantiate(objects[rand], spawnpointss[i].position,Quaternion.identity);
}
}
}
}
1 Antwort
Vom Fragesteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, programmieren, Unity
Ich würde zunächst die Objekte bestimmen, die platziert werden sollen. Ich gehe einmal davon aus, dass jedes konkrete Objekt im Array individuell ist.
Das Array kann man also zuerst einmal zufällig sortieren:
for (var index = 0; index < objects.Length; ++index)
{
var temp = objects[index];
var randomIndex = Random.Range(index, objects.Length);
objects[index] = objects[randomIndex];
objects[randomIndex] = temp;
}
Dann holt man sich eine zufällige Anzahl an Elementen und nutzt diesen Wert später für die Schleife, die die Objekte schließlich platzieren soll.
var numberOfObjectsToSet = Random.Range(0, objects.Length);
An der Stelle ist dann auch klar, wie viele Spawn-Punkte benötigt werden. Deshalb würde ich diese auch erst jetzt ermitteln. Um Duplikate zu vermeiden, kann man auch an dieser Stelle überlegen, die Spawn-Punkte wieder erst zufällig zu sortieren.
Es sollte übrigens darauf geachtet werden, dass es generell nicht mehr Objekte als Spawn-Punkte gibt.
Die Platzierung sieht dann so aus:
for (int index = 0; index < numberOfObjectsToSet.Length; ++i)
{
Instantiate(objects[index], spawnpoints[index].position, Quaternion.identity);
}