Ich bin also auf ein Problem in dem Spiel gestoßen, an dem ich arbeite, aber es scheint eine ziemlich grundlegende Sache zu sein, die wahrscheinlich in vielen Spielen auftaucht.
Mein Spiel erfordert, dass einige Gameplay-Funktionen zu einem bestimmten Zeitpunkt während einer Charakteranimation ausgeführt werden. Wie der Titel schon sagt, frage ich mich, welche guten Techniken und grundlegenden Strategien es gibt, um spielbezogene Ereignisse / Funktionen / Aktionen mit bestimmten Punkten in der Animation eines Charakters zu synchronisieren.
Hier sind einige einfache Beispiele dafür, worüber ich in verschiedenen Arten von Spielen spreche:
Dein Charakter lädt seine Waffe in einem Schützen nach . Ihr Charakter spielt seine "Reload" -Animation ab, aber es ist wichtig, dass die Funktion zum Festlegen der currentAmmo-Variablen nur genau zu dem Zeitpunkt aufgerufen wird, nachdem das Magazin ausgetauscht und die Waffe gespannt wurde. Dies kann irgendwann in der Mitte der Reload-Animation sein.
In einem rundenbasierten Rollenspiel stehen deine Charaktere in einer Linie vor einer Reihe von Feinden. Wenn einer Ihrer Charaktere zum Angriff aufgefordert wird, rennt / springt einer Ihrer Charaktere auf einen der Feinde zu und zerschlägt sein Riesenschwert, bevor er zu seinem Stehplatz zurückläuft / springt. Sie möchten sicherstellen, dass der Feind genau in dem Moment beschädigt wird, in dem die Slashing-Animation abgespielt wird - irgendwann zwischen Hochlaufen und Zurücklaufen.
In einem Stealth-Spiel kann sich Ihr Charakter an Computer und Schaltflächen in der Welt anschleichen und mit ihnen interagieren. Möglicherweise gibt es einen Knopf, der die Stromversorgung der Lichter des Außenpostens, den Sie infiltrieren, ausschaltet. Wenn der Aktionsknopf gedrückt wird, streckt Ihr Charakter die Hand aus und drückt den Knopf und kehrt dann zu seiner Leerlaufhaltung zurück. Sie möchten, dass die Lichter genau an der Stelle in der Animation 'push_button' ausgeschaltet werden, wenn die Taste gedrückt wird.
Zugegeben, mein spezieller Fall ähnelt am ehesten dem zweiten Beispiel , in dem ich eine Animation erstellt habe, in der mein rundenbasierter Charakter während eines Angriffs nach vorne springt und ich möchte, dass der Schaden genau in dem Moment angewendet wird, in dem die Animation Kontakt aufzunehmen scheint . Da mein Spiel ein rundenbasiertes System verwendet (stellen Sie sich etwas wie Final Fantasy oder Fire Emblem vor), möchte ich den Schaden / die Heilung / die Magie / etc. Wird zur richtigen Zeit während jeder Charakteranimation angewendet, obwohl ich eigentlich keine Kollisions- / Hitboxen verwende.
Ich sollte erwähnen , dass ich mein Spiel in einem beliebten Spiel - Engine mache, und dass jetzt ich dies Handhabung durch ihre Animation mit Ereignissen oder benachrichtigt etwas in der Nähe der gewünschten Ergebnisse zu erzielen - mein Charakter führt einen bestimmten Befehl und Trigger ein Die befehlsspezifische Animation (dh: 'attack_command') und die Animations-Assets für jeden meiner Befehle müssen ein Animationsereignis enthalten / 'Rückruf' in die ExecuteCommand-Funktion meiner Charaktere benachrichtigen. Mit anderen Worten - der Charakter weist die Angriffsanimation an, abgespielt zu werden, und dann sendet die Angriffsanimation einen Ereignis- / Benachrichtigungsrückruf an den Charakter genau zu dem Zeitpunkt während der Animation, an dem der Schaden verursacht werden soll.
Ehrlich gesagt funktioniert das jetzt, aber es fühlt sich einfach falsch an - als würde mir hier ein Teil des Gesamtbildes fehlen! Ein Grund dafür, dass sich diese Methode falsch anfühlt, ist, dass sie die Spielelogik mit den Animationsressourcen koppelt. Wenn mein Animations-Asset vergisst, ein ExecuteCommand () -Ereignis / einen Rückruf einzuschließen, wird der Befehl nicht ordnungsgemäß ausgeführt, und es wird zusätzlicher Code benötigt, um zu überprüfen, ob eine Befehlsanimation beendet wurde, ohne den Befehl auszuführen. Es ist chaotisch und bedeutet, dass mein Gameplay eine seltsame Abhängigkeit von seinen Assets hat. Natürlich möchte ich, dass der Schaden an einem bestimmten Punkt während meiner Angriffsanimation auftritt, aber ich finde es wirklich komisch, Gameplay-Code in Animations-Assets aufzurufen.
Was übersehe ich hier? Was sind einige gute allgemeine Techniken für den Umgang mit solchen Situationen, in denen bestimmte wichtige Spielaktionen zu bestimmten Zeiten während der Animationen ausgeführt werden sollen?
Bearbeiten: Zur Verdeutlichung ist dies weder eine motorspezifische Frage noch suche ich nach motorspezifischen Designs / Techniken. Ich interessiere mich für allgemeine Animations- / Gameplay-Synchronisationstechniken, die Sie in Ihren Spielprojekten unabhängig von den verwendeten Technologien verwenden können.