2016-03-20 5 views
-2

Momentan erstelle ich ein Spiel, in dem das ganze Level generiert wird, wenn der Spieler sich bewegt. Ich habe ein funktionierendes Skript dafür, aber jetzt möchte ich Hindernisse vor dem Spieler erzeugen. Meine Idee ist es, meinem Terrain-Segment ein leeres Objekt hinzuzufügen (diese werden dynamisch generiert) und dann zufällige Hindernisse an ihrer Position zur Laufzeit zu instanziieren. Das einzige, was ich nicht weiß, ist, wie dieses Skript ein zufälliges leeres Objekt (leeres Objekt ist Kind des Segments) auswählt, um dieses Hindernis zu instanziieren? Das Skript, das den Level generiert, ist an den Player angehängt.Zufälliges Erzeugen von Hindernissen in Unity

+0

Erwarten Sie nicht, dass Leute Code für Sie schreiben. Zumindest einen Code zur Verfügung stellen. Geben Sie, was Sie versucht haben und jemand kann Ihnen helfen. – Programmer

+0

Mein Problem ist, dass ich keine Funktion finden kann, die Kind zurückgeben würde oder es transform.position und ich bin fest. Ich habe einige Funktionen gesehen, die das tun sollten, aber keiner von ihnen hat für mich funktioniert. –

Antwort

1

Dies gibt Ihnen eine Idee, wie es geht. Spawnt ein zufälliges Spielobjekt auf eines der leeren Spielobjekte in Ihrem Gelände.

//Add the random objects in the inspector 
public List<GameObject> gameObjects; 
//Spawn points around the terrain 
public List<Transform> emptyTransforms; 

foreach(var item in emptyTransforms){ 
    var objToSpawn = gameObjects[Random.Range(0, gameObjects.Length)]; 
    var objSpawned = Instantiate(objToSpawn, emptyTransforms[Random.Range(0, emptyTransforms.Length)].position, Quaternion.identity); 
    objSpawned.transform.SetParent(newParent); 
} 
+0

Gibt es eine Möglichkeit, dieses Kind Spielobjekte in Skript zu bekommen? Das würde sehr helfen. –

+0

@faken Sie müssen keine zufälligen Objekte als Kind von leeren Spielobjekten einfügen oder umgekehrt. Legen Sie einfach die leeren Spielobjekte um Ihre Szene und ziehen Sie dann die zufälligen Spielobjekte (die in Ihrem Ordner, die Sie instanziieren) und die Szenen leeren Spielobjekte auf die öffentlichen Listen im Skript. –

+0

Ok, es funktioniert sehr gut, aber ich habe noch ein Problem: Wie kann ich diese Objekte zerstören, nachdem das Terrain-Segment, von dem sie erzeugt wurden, zerstört wurde? –

0

Verwenden Sie die Random.Range-Funktion, um zufällige Werte zu berechnen. Dann machen Sie die Werte innerhalb der Grenzen, wo Sie spacen möchten, und erstellen Sie ein Vector3 mit diesen Werten. Jetzt werden die Hindernisse in einem zufälligen Bereich erzeugt.

0

Wenn Sie eine feste Liste möglicher Positionen haben, speichern Sie sie einfach in einer öffentlichen Variablen im Skript. Wenn Ihre leeren Spielobjekte die Positionen sind, erstellen Sie eine public GameObject[] positions;, füllen Sie sie und verwenden Sie etwas wie Random.Range, um eines davon auszuwählen.

Auch ich schlage vor, Sie betrachten Element Pooling und nicht instanziieren neue Objekte die ganze Zeit (und wahrscheinlich "alte" zerstören). Das ist besser für deine Leistung.