Unity, DeltaTime, FixedTimestamp und wie man sich selbst reinlegt

Viel zu lange sass ich jetzt an einem Problem, dass ich gerne mit euch teilen möchte. Es geht wieder um das „SpaceshipInTrouble“-Projekt, genauer gesagt um die Steuerung des kleinen Raumschiffes. Hierzu habe ich zwei „analoge Joysticks“ eingebaut (die Knöpfe links und rechts auf dem Screenie). Über den linken steuert man das Schiff, über den rechten kann man die Schuss-Richtung bestimmen. spaceship_progress_01

Um dem Spieler ein angenehmeres und „realistischeres“ Spielverhalten zu ermöglichen, soll das Raumschiff nicht sofort beim Bewegen des Joysticks auf Maximalspeed sein, sondern langsam auf eine Maximalgeschwindigkeit hin beschleunigen. Gleichzeitig soll bei einem Richtungswechsel oder bei einem Stoppen der Beschleunigung das Raumschiff noch ein wenig in die alte Richtung weiterdriften. Trägheit for the win. Weiterlesen

Unity3D Android Build: ADB im Kampf mit BlueStacks und falschen Treibern

Bei meinen Experimenten mit Unity3D, dem neuen Projekt „SpaceshipInTrouble“ und entsprechenden Tests bin ich auf ein Problem gestossen, was noch einige Probleme nachgezogen hat: „Build and Run“ für Android im Unity3D kompiliert zwar brav irgendwas zusammen, die App startet aber nicht und wird auch nicht installiert. In diesem Artikel will ich beschreiben was das Problem verursacht hat, und wie man es lösen bzw. einen halbwegs brauchbaren Workaround finden kann. Weiterlesen

New Project: Spaceship in trouble!

Endlich ist es wieder so weit, ein neues Projekt steht in den Startlöchern! „Spaceship in trouble!“ schwirrt zwar schon seit einer Weile im Raum herum, aber so wirklich vorwärts ging es da die letzten Wochen nicht. Ursprünglich wollte ich das Projekt in HTML5 mit JavaScript, bzw. dann später TypeScript umsetzen, um zu demonstrieren, dass die Web-Technologien durchaus spieletauglich sind (github). Im Laufe des Projektes hat sich dies zwar mehr als bestätigt (die FPS auf den verschiedenen Umgebungen waren dank CocoonJS sehr zufriedenstellend), dennoch bin ich zu einem möglicherweise anderem Schluss gekommen, als ursprünglich beabsichtigt…

Weiterlesen

LDRZ Fortschritt #8: Von allem etwas mehr :)

Diesmal habe ich mir mal ein paar Minuten genommen, um den Level ein wenig zu vergrößern, mit einer kleinen Galerie zu versehen und weitere Monster zu platzieren. Auch hat der Dungeon-Innenarchitekt zugeschlagen und überall schöne Fackeln aufgehängt. Doch seht selbst:

Warum ich hier dann bereits an erste Performancegrenzen gestoßen bin, und wie ich diese gelöst habe? Lest selbst…

Weiterlesen

LDRZ Fortschritt #7: Swordtrail, Sterbliche Gegner, Musik, …

Im heutigen Fortschrittsvideo kommen viele Dinge zusammen :)! Doch schaut selbst:

Neben coolen Sword-Trails für die Special-Attack habe ich mir auch Hintergrund-Musik aus dem Unity-Asset-Store gezogen, das Schwert in Flammen gehüllt, und die Gegner können auch endlich sterben *muhahaha*. Im Folgenden beschreibe ich wieder kurz die entstandenen Probleme und die gefundenen Lösungen :)…

Weiterlesen

LDRZ Fortschritt #6: Knockback! Die erste special attack!

Getreu dem Motto ein Video sagt mehr als tausend Worte, diesmal zuerst das Vid:

Wie ihr schon sehen könnt, es gibt die erste coole Attacke :)! Ihr glaubt gar nicht, wie viel Spaß es macht, die Skelette durch die Gegend zu werfen, nachdem wir immer noch keine andere Möglichkeit haben, uns zu wehren. Wenn ihr wissen wollt, wie das ganze umgesetzt ist, lest den kompletten Beitrag…

Weiterlesen

LDRZ Fortschritt #5: Gegner Highlight bei MouseHover

Mini-Sonntags-Morgen-Update :). Die Gegner lassen sich nun via Maus hovern. Wie ist’s gelöst? Ziemlich einfach mit Sphere-Collidern auf einem „MouseHoverLayer“, die auf isTrigger stehen, damit sie die Skelette in ihren Kollisionen nicht beeinflussen. Von der Kamera ein RayCast auf den Layer, wenn ein Objekt gefunden wird bekommt es „onMouseHoverStart“ bzw. „onMouseHoverEnd“ gesendet. Entsprechend verändert es dann seine mainColor von dunkelgrau auf hellgrau 🙂 -> fertig.

Glücklich bin ich mit der Variante für die Zukunft noch nicht, da die Collider vermutlich über die Maße Ressourcen verschlucken, aber bislang läuft’s ohne Probleme. Seht selbst:

Diesmal gibt’s keine weiteren Details zum Beitrag 🙂 nächstes mal wieder!

LDRZ Fortschritt #3: Playermodel und „PlayerActiveIndicator“

Heute eine Zusammenfassung der Mini-Änderungen der vergangenen Woche. Leider bin ich Abends nicht mehr zu all zu viel gekommen, doch ein bisschen was ist es schon. Zunächst wie gewohnt das Video:

Kurz zusammengefasst:

  • Der Spieler hat nun ein ansprechenderes Model (aus dem Unity Asset-Store)
  • In der Gegnerbewegung wurde ein Bug gefixt (umringen den Spieler jetz viel schöner)
  • Unter dem aktiven Spieler (derzeit gibt es nur einen) erscheint ein grüner Kringel.

Wie immer berichte ich im Folgenden kurz von den Problemen und Erkenntnissen, die bei der Umsetzung dieser Features entstanden sind:

Weiterlesen

LDRZ Fortschritt #2: Das Verhalten von Gegner-Gruppen

Puh, im Prinzip ist da gestern der halbe Tag für draufgegangen. Das sieht in den fertigen Spielen erheblich einfacher aus, als es ist (oder ich habe einfach noch nicht den passenden Algorithmus gefunden). In dem Video zu meinem letzten Fortschritts-Beitrag (hier) liefen die Skelette noch dem Spieler hinterher, ohne sich gegenseitig zu beachten. Jetzt kollidieren sie mit ihresgleichen, was zu sehr unschönen Nebeneffekten führen kann. Im schlimmsten Fall hat bereits ein Skelett am Spieler gereicht um beliebig viele weitere Skelette zu blocken, die genau hinter dem Skelett standen und an diesem nicht vorbei kamen.

In diesem Beitrag gehe ich kurz darauf ein, wie ich versucht habe dieses Problem zu lösen. Was dabei herausgekommen ist seht ihr hier im Video:

Weiterlesen