verbessertes script zum dynamischen erzeugen von Objekten

Ich habe die letzten zwei Tage einiges getüftelt und selbst während ich diesen Artikel schrieb noch Verbesserungen und Erweiterungen eingebaut. Heute möchte ich euch nun das neue Script zum Erstellen und positionieren von Items auf dem Terrain vorstellen. Man merkt oft erst während der Arbeit an einem Spiel, an was man beim scripten doch alles denken muss. Ich benutze im Spiel ein Terrain mit vielen Bergen und Tälern. Über dem Terrain habe ich eine Wasserfläche erstellt, so dass viele Berge von Wasser umschlossen sind. Mit meinem letzten script zum erzeugen und platzieren von Items wurden die Items auch am Meeresgrund platziert. Das war nicht so toll da man diese Items so kaum finden konnte.  Außerdem habe ich definiert das mein Charakter stirbt sobald er ganz ins Wasser eintauchte. So konnte ich die Items natürlich nicht einsammeln und auch das Level nicht beenden.

Ich habe einige Fehlerbehandlungen eingebaut um das script noch nutzerfreundlicher zu gestalten. Wird z.B. kein ItemObjekt angegeben, dann hat das Script nichts zu tun und gibt diese Meldung auch aus. Man kann also sein Spiel starten ohne deswegen Abstürze zu riskieren. Weiter muss man nicht zwangsläufig eine Wasserfläche benutzen. Lässt man diese weg dann werden die Items einfach wie zuvor auf der kompletten vorgegebenen Fläche platziert. Gibt man das SeaLevel-Objekt an dann werden die Items nur über dem Meeresspiegel auf dem Terrain angeordnet. In der letzten Version des Scripts war es auch nicht möglich den Bereich in dem die Items platziert werden sollten, beliebig auf dem Terrain anzugeben. So wurde immer als Startpunkt für X und Z 0 benutzt. Jetzt kann man den Bereich beliebig festlegen indem man die Start- und Endpunkte für X und Z angeben kann.

Folgende Funktionen wurden integriert.

  • Angabe der Menge der zu erzeugenden Items
  • Item direkt auf der Oberfläche platzieren
  • Item in einem bestimmten Abstand zur Oberfläche platzieren
  • Gravität benutzen (das ItemObject muss über ein rigidbody verfügen)
  • Angabe des Bereichs in dem die Items platziert werden sollen
    Startposition X, Startposition Z, Endposition X und Endposition Z
  • Meeresspiegel benutzen

 

Hier mal ein paar Beispiele.

Einstellungen Bild1:
Item Amount = 100,
RangeXStart = 0,
RangeXEnd =  20,
RangeZStart = 0,
RangeZ = 2000

 

 

 

 

Einstellungen Bild2:
Item Amount = 100,
RangeXStart = 0,
RangeXEnd =  2000,
RangeZStart = 0,
RangeZEnd = 50

Script – CreateItems

Um beim Start des Spiels seine Items auf dem Terrain automatisch platzieren zu lassen, können Sie dieses Script direkt auf das Terrain ziehen.

Durch die Angabe von UseGravity, können Sie ein paar schöne Effekte erzielen. Stellen Sie sich vor, sie haben eine schöne, flache Landschaft und die Items sind kurz zu sehen bevor diese auf den Boden fallen.
Dies ist natürlich nicht so toll wenn man wie in dem von mir anfangs geschilderten Fall, viele Berge und Wasser hat und dort Gravität benutzt. Viele Items die auf Berghängen platziert worden, würden einfach ins Meer rollen.

ACHTUNG:
Sollten Sie ein SeaLevel-Objekt angeben dann sollten Sie beachten ob in dem Bereich den Sie definieren überhaupt Land über dem Meeresspiegel vorhanden ist da Unity sonst abstürzen könnte. Wer einen Tip hat wie ich das noch abfragen kann der kann hier gerne posten oder mich über Google+ oder twitter kontaktieren.

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

Ein Kommentar zu “verbessertes script zum dynamischen erzeugen von Objekten

  1. Man könnte zum abfragen ob über ein Meeresspiegel überhaupt land ist, über den Wasser einen unsichtbaren Box Collider stellen (Platte) Die genau auf den umriss des meeres abgestimmt ist.. Diese soll dann einen Statischen Wert ausgeben. Die Objecte die Platziert werden müssen dann nur noch mit zbw. getGroundHit(variable == 1) gugen ob unter dem Platz wo sie hin möchten überhaupt frei ist…

    lg Nico