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 :)…

Sterbliche Gegner

Der Teil war erheblich einfacher als vermutet. Im Prinzip habe ich einfach meiner Special-Attacke vom letzten Mal neben der KnockBack-Message (welche jetzt im übrigen OnKnockBack heißt, um zu verdeutlichen, dass dies eine zu empfangende Nachricht darstellt) eine OnDamageReceived-Message eingefügt. Der Parameter ist ein Float und bestimmt, wie viele Hitpoints dem Gegner abgezogen werden sollen. Später wird man hier vermutlich anstelle des Floats einen Struct übergeben, der alle denkbaren Schadenstypen (Gift, Feuer, Eis, Magie, Körperschaden, …) kapselt.

Der Gegner selbst reagiert dann entsprechend in seiner OnDamageReceived-Methode und zieht sich selbst die Hitpoints ab. An dieser Stelle könnten dann auch eventuelle Resistenzen, Rüstung, etc. mit einberechnet werden. Damit Ich etwas flexibler bin und nicht für jeden Gegner-Typ neu diese Methode implementieren und berechnen muss, habe ich eine Komponente „BasicEnemyProperties“ eingeführt. Diese beinhalten neben CurrentHitPoints, MaxHitPoints, HealthRegenPerSecond usw. auch die Message-Listener für OnDamageReceived.

Eine weitere Komponente „EnemyHealthBar“ wiederum greift nun auf diese BasicEnemyProperties-Komponente zu, um zu berechnen, ob der Gegner überhaupt beschädigt ist (ansonsten wird keine Healthbar angezeigt), und wie stark. Entsprechend wird dann die Länge der grünen/roten Healthbar berechnet und gezeichnet.

Für das Zeichnen der Healthbar habe ich mich einer leicht modifizierten Variante dieses Skriptes bedient: klick. Problem hierbei war, dass das Skript seltsamerweise im Debugmode funktioniert hat, nicht jedoch im Releasemode (weder Web noch .exe). Scheinbar kam Unity mit der selbst generierten Textur nicht klar. Folgende Zeilen konnten das Problem dann lösen:

Sobald der Gegner unter 0 HitPoints fällt, wird die Sterbeanimation ausgeführt und kurz darauf das GameObjekt entfernt. Hierfür möchte ich dann eigentlich noch eine Mechanik, welche anstelle des Gegner-Spielobjektes ein Gegner-Leichenobjekt einführt. Dieses soll dann noch auf KnockBack-Nachrichten reagieren (um die Leiche ein wenig durch die Gegend fliegen zu lassen :)), aber selbst keine weiteren Skripte, Collider oder sonstiges beinhalten.

Swordtrail

Ich weiß gar nicht, wie man das übersetzt :). Gemeint ist hierbei der hinter einem schnell bewegten Schwert hergezogene Grafik-Effekt, den man aus diversen Filmen und spielen kennt. Vor ein paar Tagen hatte ich mich bereits daran versucht, dies mittels Partikel-Effekten zu realisieren, so wirklich gut hat das aber nicht funktioniert. Das Schwert bewegt sich im Falle meiner Spezialattacke viel zu schnell, als dass sich hier die Partikel flüssig genug an das Schwert heften könnten. Zudem soll bei einem Sword-Trail die Grafik ja eigentlich umso stärker/größer sein, je schneller sich das Schwert bewegt. Bei den Partikeln ist das Gegenteil der Fall.

Heute bin ich zufällig über den TrailRenderer gestoßen, welcher im Prinzip genau das ist, was ich möchte :). Einfach ein leeres GameObjekt erstellen, dem Schwert als Kindobjekt hinzufügen, entsprechend Material (Feuer), Länge und start-/endgröße des Trails im Inspector auswählen, und schon ist man im Prinzip fertig.

Allerdings hat man den Trail dann auch während dem Laufen des Helden, was wiederum unschön aussieht. Also einfach via

den Trailrenderer aufgespürt und zu Beginn der Spezial-Attacke trail.enabled = true  gesetzt, und nach der Attacke entsprechend wieder auf false.

Hintergrundmusik

Zur Hintergrundmusik gibt’s nur so viel zu sagen: Ne gescheite Musik zu finden ist vermutlich fast noch schwieriger als geeignete Grafik-Modelle zu finden *seufz*. Die jetzige dient nur als Platzhalter :)… Wer was passendes kennt oder gar komponieren kann: Immer her damit! Bin auch bereit ein bisschen was dafür zu löhnen.

Next Steps

Nachdem die Skelette nun sterblich sind, ist für mich der einzig logische Schluss: Der Spieler muss auch sterblich werden!! Was meint ihr :)?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.