Ich plane die Entwicklung eines Spiels in Unity3D und versuche herauszufinden, was die Engine bereits bereitgestellt hat und was ich selbst codieren muss.
Das Spiel selbst wird ein Rhythmusspiel sein, bei dem Audio- und Grafikereignisse so synchronisiert werden, dass sie immer zum gewünschten Zeitpunkt wiedergegeben werden. Was ich vermeiden möchte, ist ein potenzielles Szenario der Verzögerung, bei dem entweder das Audio oder die Grafiken schneller als die anderen fortschreiten.
Als wir diese Art von Koordinierungssystem in meiner Game-Design-Klasse an der Universität diskutierten, nannte mein Professor diese Art von Design eine "Timeline" -Klasse. Die Idee ist, dass Sie eine oder mehrere dieser Instanzen instanziieren können, um unterschiedliche Fortschritte zu erzielen, zukünftige Ereignisse zu planen und regelmäßige Ereignisse zu synchronisieren. Die Bezeichnung einer "Timeline" -Klasse scheint jedoch auf meinen Professor selbst beschränkt zu sein, da die Prüfung, ob eine bestimmte API über die "Timeline" -Funktionalität verfügt, ein erfolgloses Unterfangen war.
Gibt es einen allgemeineren Namen für diese Art von Funktionalität? Gibt es in Unity bereits Methoden, um die Planung von Ereignissen wie folgt zu koordinieren, oder muss dies auf die Engine aufbauen? Und wenn doch, würde ich mich freuen, auf einige Tutorials hingewiesen zu werden!
quelle
Antworten:
Obwohl diese Funktionalität in Unity nicht verfügbar ist, sollte eine grundlegende Implementierung einer solchen Zeitachse nicht allzu schwierig sein.
So würde ich vorgehen:
timeline.AddEvent(0.25f, MyCallback)
.Mit jedem
Update
würde die Timeline-Klasse:float
) um die verstrichene ZeitWenn Sie eine Art Rücklauf- oder Wiedergabefunktion benötigen , wäre es natürlich töricht, alle Ereignisse aus der Warteschlange zu entfernen (dh, Sie müssten sie beim Zurückspulen erneut hinzufügen). Stattdessen können Sie auch ein Array verwenden, das Ihre Ereignisse enthält . Eine Veranstaltung würde aus einem
Time
und bestehenCallback
. Sie müssten Ihr Array sortiert haltenTime
.Anstatt Elemente aus dem Array zu entfernen, würden Sie den aktuellen Array-Index verfolgen und bei jeder Aktualisierung vor diesem Index suchen und alle Rückrufe mit ausführen,
Playhead >= Time
während Sie den Index entsprechend erhöhen.Das Implementieren einer schnelleren Wiedergabegeschwindigkeit funktioniert mit beiden Implementierungen und ist so einfach wie:
quelle
Nein, Unity3D verfügt nicht über eine solche Standard-API.
Es unterstützt jedoch Coroutinen, und ich schlage vor, Sie untersuchen sie. Coroutinen machen das Planen und Synchronisieren von Ereignissen im Allgemeinen sehr einfach.
quelle
Ich bin mir nicht sicher, ob dies seit den Antworten von 2012 neu ist, aber Unity unterstützt tatsächlich die Zeitleistensteuerung über den (Legacy-) Animations-Editor .
Obwohl diese Funktion hauptsächlich zum Animieren von Objektparametern mit Kurven vorgesehen ist, können Skripts für Animationsereignisse ausgelöst werden . Diese Skripte könnten Ihre Grafik und Audio steuern.
quelle