So verwenden Sie Sound zum Erstellen von 3D-Geometrie in Unity

Was Sie erstellen werden

In diesem Lernprogramm erfahren Sie, wie Sie in Unity einen einfachen Audio-Visualizer erstellen. Wir gehen den Code durch, der die Audiodaten ausliest, und dann auf verschiedene Arten, um diese Daten in einem Unity-Spiel anzuwenden.
Um dies zu erreichen, benötigen Sie ein grundlegendes Verständnis von Unity. Sie benötigen auch die Musikdatei eines Songs, um etwas auf newgrounds.com zu visualisieren, wenn Sie etwas Lustiges benötigen, wie Mission Completed XL.
Die Projektdateien befinden sich auf GitHub, wenn Sie sie auschecken möchten, dies ist jedoch nicht unbedingt erforderlich. Das .unity3d Datei, die wir später verwenden werden, ist auch dort.
Bereit? Lass uns gehen!

1. Line Visualizer

Erstellen Sie ein neues Unity-Projekt, fügen Sie Ihre Musikdatei dem Asset-Ordner hinzu, erstellen Sie eine neue JavaScript-Datei und benennen Sie sie lineVisualizer. Öffnen Sie diese Datei und fügen Sie den folgenden Code hinzu:

public var detail: int = 500; public var amplitude: float = 0,1; private var startPosition: float; function Start () startPosition = transform.localPosition.y;  Funktion Update () var info: float [] = neuer Float [Detail]; AudioListener.GetOutputData (info, 0); var packagedData: float = 0.0; für (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  

Dieses Skript verwendet die verfügbaren Audiodaten und wendet sie auf bestimmte Weise an. Die Detailvariable gibt an, mit welcher "Auflösung" die Audiodaten ausgelesen werden sollen. Höhere Werte in diesem Bereich können ein "jittery" Ergebnis erzeugen. Sie können später experimentieren, um die beste Einstellung herauszufinden, und den Wert für den Grundwert belassen.
Im Moment tut es nichts, da wir nicht angegeben haben, was zu tun ist und was man hören soll.
Fügen Sie am Ende der Zeile die folgende Zeile hinzu Aktualisieren() Funktion in der lineVisualizer Skript:

transform.localPosition.y = startPosition + packagedData * Amplitude;

Erstellen Sie dann eine Kugel, benennen Sie sie LineVisualizer, und fügen Sie das Skript hinzu. Beweg den LineVisualizer vor der Kamera.

Wir müssen auch den Sound in der Szene haben, also kommen wir dazu. Erstellen Sie ein neues Objekt und benennen Sie es Audio quelle; Es wird der "Sprecher" sein, der die Musik erzeugt. Sie können die Musikdatei aus dem Asset-Ordner darauf ziehen. Die Datei wird sofort nach dem Starten der Szene abgespielt.

Bevor Sie es jedoch versuchen, setzen Sie die Audiokomponente auf sofort spielen und zu Schleife. Gehen Sie auch zur Musikdatei und stellen Sie sie auf 2D-Sound. Dadurch wird sichergestellt, dass die Musik überall gleich gut gehört werden kann Audio quelle ist plaziert. Machen Sie schließlich ein Fertigteil daraus, damit wir es später verwenden können.

Wenn alles korrekt eingerichtet wurde, wird die lineVisualizer sollte sich auf und ab bewegen. Erfolg! Die Audiodaten werden auf unterhaltsame und interessante Weise ausgelesen und angewendet.

Jetzt machen wir es schöner.

Erstellen Sie ein leeres Objekt, fügen Sie einen Trail-Renderer hinzu und verketten Sie es mit dem lineVisualizer. Diese Trail-Einstellungen erzeugen einen schönen Effekt:

Verketten Sie das LineVisualizer zur Kamera, so dass sie sich bewegt, wenn sich die Kamera bewegt. Das Setup sollte so aussehen:

Als Nächstes erstellen Sie eine kleine JavaScript-Datei mit dem Namen Drehung.js, und fügen Sie den folgenden Code hinzu:

#pragma strict var speed: float = 15.0; function Update () transform.Rotate (0, Geschwindigkeit * Time.deltaTime, 0); 

Legen Sie das Drehungsskript auf die Kamera, sodass es sich um sich selbst dreht.

Versuch es! Die Kugel sollte auf und ab springen und eine Linie dahinter ziehen.

Um es noch schöner zu machen, deaktivieren Sie den Cube-Renderer durch Deaktivieren der Würfel-Renderer-Komponente und platzieren Sie ihn etwas tiefer, damit er nicht aus dem Bildschirm springt. Stellen Sie außerdem die Hintergrundfarbe der Kamera auf Schwarz ein, fügen Sie der Szene ein gerichtetes Licht hinzu und geben Sie dem Pfad eine schöne Farbe und Material.

Sie sollten über einen einfachen Linienvisualisierer verfügen, der mit der Musik hin und her springt und eine passende Linie zeichnet. Probieren Sie es in diesem Build aus:

2. Balkenvisualisierer

Bar-Visualisierer sind etwas kniffliger. Wir werden mehrere "Bars" nebeneinander setzen, die auf ihre eigene Art und Weise zur Musik springen. Ein "echter" Balkenvisualisierer zu erstellen ist viel komplizierter als diese eher einfache Einführung. Daher müssen wir eine falsche Version erstellen (die sowieso gut aussieht)..

In den Projektdateien finden Sie eine 3D-Datei mit einem speziellen Cube. Es ist nicht streng notwendig, damit Sie es überspringen können, wenn Sie möchten.

Erstellen Sie einen neuen Würfel, und tauschen Sie das Standard-Würfelnetz für das zuvor genannte aus visualizerCube Mesh. Der neue hat seinen Mittelpunkt an einer Kante. Wenn Sie den Cube zur Laufzeit vergrößern, wird er nur in eine Richtung verschoben.
Erstellen Sie ein neues Skript namens barVisualizer. Fügen Sie den folgenden Code hinzu:

#pragma strict public var detail: int = 500; public var minValue: float = 1.0; public var amplitude: float = 0,1; private var startScale: Vector3; function Start () startScale = transform.localScale;  Funktion Update () var info: float [] = neuer Float [Detail]; AudioListener.GetOutputData (info, 0); var packagedData: float = 0.0; für (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  transform.localScale = new Vector3(minValue, (packagedData * amplitude) + startScale.y, minValue); 

Es ist dem ähnlich lineVisualizer Skript, aber die Befehle, die die Position anpassen, wurden geändert. Sie passen jetzt die vertikale Höhe des Würfels an.
Erstellen Sie einen Würfel, nennen Sie ihn BarVisualizer, Geben Sie ihm eine schöne Farbe und setzen Sie das soeben erstellte Skript darauf. Erstellen Sie dann mehrere Kopien davon und legen Sie sie neben der Kamera ab. Es sollte so aussehen:

Wenn Sie es ausprobieren, werden Sie feststellen, dass sich alle Würfel auf dieselbe Weise bewegen. Um jeden Würfel wie Balken vergrößern und verkleinern zu lassen, passen Sie den Code folgendermaßen an:

#pragma strict public var detail: int = 500; public var minValue: float = 1.0; public var amplitude: float = 0,1; private var randomAmplitude: float = 1.0; private var startScale: Vector3; function Start () startScale = transform.localScale; randomAmplitude = Random.Range (0,5, 1,5);  Funktion Update () var info: float [] = neuer Float [Detail]; AudioListener.GetOutputData (info, 0); var packagedData: float = 0.0; für (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  transform.localScale = new Vector3(minValue, (packagedData * amplitude * randomAmplitude) + startScale.y, minValue); 

Dies gibt jedem Stab seine eigene "Kraft", mit der er sich bewegt. Sie können den Effekt in diesem Build sehen:

3. Visualisierung mit 3D-Skala

Dieser ist ein bisschen anders. Anstelle der Höhe eines Objekts zeigen wir die Visualisierung, indem Sie ein gesamtes Objekt nach oben und unten skalieren. Dies kann für Hintergrundelemente in musikbasierten Spielen verwendet werden oder um Partikel und andere Effekte zur Musik zu bewegen.
Der Code ist so ziemlich der gleiche wie der barVisualizer, Die Skalierungsbefehle wurden erweitert, um auch in drei Dimensionen zu skalieren:

#pragma strict public var detail: int = 500; public var minValue: float = 1.0; public var amplitude: float = 0,1; private var randomAmplitude: float = 1.0; private var startScale: Vector3; function Start () startScale = transform.localScale; randomAmplitude = Random.Range (1.0, 3.0);  Funktion Update () var info: float [] = neuer Float [Detail]; AudioListener.GetOutputData (info, 0); var packagedData: float = 0.0; für (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  transform.localScale = new Vector3((packagedData * amplitude) + startScale.y, (packagedData * amplitude) + startScale.y, (packagedData * amplitude) + startScale.z); 

Legen Sie es auf eine Kugel (oder ein beliebiges anderes Objekt Ihrer Wahl) und erstellen Sie mehrere Kopien, um einen schönen Effekt zu erzielen. Probieren Sie es in diesem Build aus:

Fazit

In diesem Lernprogramm haben Sie gelernt, wie Sie in Unity einen einfachen, in sich geschlossenen Audio-Visualizer erstellen, der auf viele verschiedene Arten angewendet werden kann. Sie können diese Techniken verwenden, um psychedelische Lichtshows zu entwerfen, die sich zeitlich zur Musik bewegen, oder als Quelldaten, die als Grundlage für ein gesamtes Spiel dienen, wie z. B. die Level-Generierung in Audiosurf, wo die Hindernisse, die Sie vermeiden müssen, rechtzeitig auftreten schlagen. Dreh durch!