So synchronisieren Sie ein Spiel mit Musik

10

Sie kennen vielleicht Ryhtm-Spiele wie Dancing Line , Geometry Dash oder sogar Guitar Hero . Sie haben etwas gemeinsam: Jede einzelne Aktion im Spiel wird mit der Musik synchronisiert. Mein Ziel ist es, ein Spiel wie Geometry Dash zu erstellen, bei dem der Spieler einige Aktionen im Rhythmus ausführen muss, während der Charakter automatisch im Level scrollt. Ich habe ein paar Fragen zu dieser Art von Spiel:

  • Muss ich meine FPS konstant halten, da sie immer mit der Musik synchronisiert sein muss?
  • Wie kann ich meine Level mit Blick auf eine Musik erstellen, um sicherzustellen, dass sie synchronisiert wird?

Ich arbeite an Unity mit C #.

Shashimee
quelle

Antworten:

18

Ich empfehle nicht, Time.deltaTime zu verwenden, um den Fortschritt durch Abspielen des Songs zu verfolgen, wie in einer anderen Antwort beschrieben.

Es eignet sich hervorragend zum Glätten und Interpolieren von Effekten in Echtzeit. Wenn Sie jedoch die Zeit des Songs anpassen möchten, sollten Sie den Song fragen.

In der Einheit können Sie eine Messung der Audioquelle ‚Fortschritt durch Wiedergabe eines Titels direkt über AudioSource.timeoder AudioSource.timeSamplesbekommen die genaue Abspielposition. (Beachten Sie, dass letzteres in Samples gemessen wird, deren Rate pro Sekunde variieren kann, je nachdem, wie Sie Ihren Track komprimiert haben.)

Auf diese Weise müssen Sie keinen eigenen Timer ausführen und hoffen, dass diese synchron bleiben. Sie können Spielauslöser für Beat-Matching-Effekte verkabeln, um die eigene Timeline des Songs zu verlassen.

Zum Überlagern von Gameplay-Sounds auf die Musik können Sie AudioSource.PlayScheduled verwenden , um sicherzustellen , dass Ihre Sounds genau im Takt landen, da selbst eine kleine Nichtübereinstimmung festgestellt werden kann

DMGregory
quelle
Irgendwelche Ideen, wie man Grafiken mit der AudioSource synchronisiert? Fe ich möchte eine Explosion oder Kollision zeigen, die mit der Musik verbunden ist. Ich möchte es genau zeigen, wenn der Ton abgespielt wird.
Syabro
Darum geht es in allen Antworten hier. Haben Sie Probleme gehabt, die Vorschläge in diesen Antworten in die Praxis umzusetzen, @syabro?
DMGregory
2

Als Alternative, wenn Sie nicht von Grund auf neu arbeiten können.

Es gibt bereits fertige Assets (unter Editor Extensions / Audio wie https://www.assetstore.unity3d.com/en/#!/content/54639 (bezahlt) oder https://www.assetstore.unity3d.com/en / #! / content / 39835 (kostenlos)), wo Sie Musiktitel mit dem Ereignis synchronisieren können. In diesem Beispiel schießt die Waffe im Takt der Musik.

Wenn Sie erfahren möchten, wie sie funktionieren, probieren Sie 1-2 der kostenlosen aus und sehen Sie sich die Quelle an.

Zibelas
quelle
Ich habe vor einiger Zeit eine Präsentation der Koreographer-Entwickler gesehen - sah aus wie ein großartiges Stück Technik! Zu der Zeit waren die Audioanalysefunktionen begrenzt, aber wenn Sie den Titel, mit dem Sie arbeiten, im Voraus kannten, könnten Sie die Technologie verwenden, um Spielereignisse sehr genau auf bestimmte Beats / Momente in der Musik zu planen. Ich weiß nicht, ob sie seit dieser Demo die Möglichkeit hinzugefügt haben, automatisch mehr Analysen durchzuführen.
DMGregory
1

Unity entkoppelt das Gameplay bereits von der Framerate. Wenn Sie daran denken, immer Time.deltaTimein Ihren Update-Funktionen zu verwenden, sollte die tatsächliche Grafik-Framerate die Spielgeschwindigkeit nicht beeinflussen. Wenn Sie also das Spiel und die Audiospur gleichzeitig starten, sollten sie synchron bleiben.

In Bezug auf das Entwerfen von Ebenen rund um Musik gibt es zwei Ansätze:

  • Der manuelle Ansatz. Sorgfältig handgefertigte Levels um bestimmte Audiospuren. Es kann hilfreich sein, die Original-Noten zur Hand zu haben, aber es ist auch möglich, dies nur nach Gehör zu tun.
  • Der prozedurale Ansatz. Verwenden Sie Audioanalysealgorithmen, um automatisch Pegel um Audiospuren zu generieren. Am einfachsten ist es, nur nach Lautstärkespitzen zu suchen. Das sollte es Ihnen bereits ermöglichen, Drum Beats in vielen Songs zu identifizieren und Hindernisse entsprechend zu erzeugen. Ein weiterer Schritt ist die getrennte Erfassung von Volumenverschiebungen in verschiedenen Frequenzspektren. Dies macht die Beat-Erkennung zuverlässiger und ermöglicht es Ihnen, verschiedene Hindernisse für verschiedene Tonhöhen zu erzeugen. Aber das kratzt immer noch nur an der Oberfläche. Die Audioanalyse ist ein sehr weites und interessantes Gebiet. Die Leute haben viel wissenschaftliche Literatur darüber geschrieben.

    Wie tief Sie in dieses Feld eintauchen müssen, hängt davon ab, wie ehrgeizig Sie sind. Einige Spiele geben sich damit zufrieden, nur die Beats zu erkennen und den Rest des Level-Designs ( Crypt of the Necrodancer ) zufällig zu generieren . Andere versuchen, so viele Aspekte des Level-Designs wie möglich unter die Kontrolle des Audios zu bringen ( Audiosurf ).

Viele Rhythmus-Spiele verwenden einen hybriden Ansatz. Sie generieren einen ersten Entwurf des Levels mit einem Generator und optimieren ihn dann von Hand, um ihn spielbarer zu machen.

Philipp
quelle
Vielen Dank für Ihre Antwort, ich werde mich darum kümmern! Ist Time.deltaTime wirklich präzise und es wird keine Zeitverzögerung mit langer Musik entstehen?
Shashimee
@ Shashimee Es sollte präzise genug sein. Wenn Sie wirklich sicher sein möchten, dass Sie nichts durch Rundungsunterschiede verlieren, verwenden Sie Time.timestattdessen.
Philipp
Ich würde einen prozeduralen Ansatz empfehlen, da er dem Spiel viel mehr Möglichkeiten zur Entwicklung eröffnet. Spieler können ihre eigenen Tracks hinzufügen, Sie können das Mesh und alle anderen Dinge im Takt ändern, wie z. B. Partikel. Außerdem werden Sie nicht viel Zeit damit verbringen, Levels zu entwerfen.
Candid Moon _Max_
1
@Philipp Leider kann Time.time noch anfälliger für Ungenauigkeiten sein, wenn das Spiel eine Weile läuft . Da es die Spielzeit seit dem Start misst und nicht seit dem Beginn des Titels oder dem Beginn des Levels, hat es nach dem Spielen eines oder zweier Songs so viele geringe Genauigkeiten verloren wie eine naive Summe von Deltas, und der Fehler kann Erhöhen Sie sich weiter, wenn das Spiel wiederholt ausgeführt / geschlafen und wiederhergestellt wird.
DMGregory
0

Sehr verbreitet ist der Ansatz, eine "Beat Map" zu haben. Jede Art von Daten, die die Beats im Song darstellen. Es kann sich um eine Textur, eine Datendatei oder etwas anderes handeln, das diese Informationen enthält. Meistens wird es manuell erstellt, um verschiedene Beats und Kombinationen zu erstellen, Versionen von Geschwindigkeiten für eine Audiokarte.

Es kann jedoch prozedural aus Audiodateidaten generiert werden.

Wie kann man die Geschwindigkeit auf den "Beat Point" bringen? Wann soll ein Objekt erzeugt werden?

Speed = Distance / Time.

Distance = Abstand zwischen den Erstellungspunkten von GameObject und dem "Beat Point".

Time =Die Audiolänge und die konstruierte Beat-Map sollten ausreichen. Mit diesen Informationen können Sie die Daten von Audio / Karte analysieren, um vorherzusagen, wann ein Objekt erzeugt werden muss, um den genauen Punkt zu erreichen. Jetzt hängt alles davon ab, wann Sie dieses Objekt spawnen möchten. Wenn Sie möchten, dass es nach dem Spawn sehr schnell ist, dann spawnen Sie es später mit großer Geschwindigkeit. Wenn Sie möchten, dass die Geschwindigkeit normal ist, benötigen Sie Zeit, um den Player zu erreichen, und Audio benötigt Zeit, um im richtigen Moment abgespielt zu werden.

Sie können sogar eine neue Karte mit Zeitstempeln für Spawns von Beat-Objekten für eine bestimmte Audiokarte erstellen. Sie müssen irgendwann einige Vorhersagen treffen, um mit dem Beat übereinstimmen zu können, für den populärsten Stil, den ich sagen würde, um vorherzusagen when, dass das Objekt erzeugt wird, damit es sich mit bestimmten Bewegungen bewegt speed. Diese können zur Laufzeit erstellt oder aus einer zuvor berechneten Datei gelesen oder im RAM gespeichert werden ...

Ich Osugehe davon aus, dass Spiele wie diese nicht haben Distance, sie haben nur die Zeit, in der Kreise schrumpfen, bpm ... Karten werden im Allgemeinen nach Maß angefertigt. Der Ansatz zur Berechnung der Grafik hängt also auch vom Stil des Spiels ab, das Sie erstellen.

Um alles zusammenzufassen, die Werte sind voneinander abhängig. Hängt davon ab, wie viele Schläge Sie haben, von der Entfernung zwischen Spawnpunkt und Spieler und hängt manchmal von den bereitgestellten Daten ab [einige Spiele haben die Geschwindigkeit jedes Schlags und sein Aussehen in einer manuell erstellten Datendatei codiert]. Wenn Sie dies prozedural tun, können Sie alles grundsätzlich mithilfe von Audiodaten berechnen.

Candid Moon _Max_
quelle