Cum se utilizează sunetul pentru a face geometria 3D în unitate

Ce veți crea

În acest tutorial, veți învăța cum să faceți un simplu vizualizator audio în Unity. Vom trece prin codul care citește datele audio și apoi prin mai multe moduri de a aplica aceste date într-un joc Unity.
Veți avea nevoie de o înțelegere de bază a Unității pentru a realiza acest lucru. Veți avea nevoie, de asemenea, fișierul muzical al unui cântec pentru a vizualiza-a găsi ceva pe newgrounds.com dacă aveți nevoie de ceva distractiv, cum ar fi Mission Completed XL.
Fișierele de proiect pot fi găsite pe GitHub, dacă doriți să le verificați, dar nu sunt strict necesare pentru a realiza acest lucru. .Unity3D fișierul pe care îl vom folosi ulterior este, de asemenea, acolo.
Gata? Sa mergem!

1. Vizualizator linie

Creați un nou proiect Unity, adăugați fișierul muzical în dosarul de materiale, apoi creați un nou fișier JavaScript și denumiți-l lineVisualizer. Deschideți acest fișier și adăugați următorul cod:

detaliu public var: int = 500; public var amplitudine: float = 0.1; private var startPosition: float; funcția Start () startPosition = transform.localPosition.y;  funcția Actualizare () var info: float [] = float nou [detalii]; AudioListener.GetOutputData (info, 0); var ambalatData: float = 0,0; pentru (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  

Acest script va lua datele audio disponibile și va aplica în anumite moduri. Variabila de detaliu îi spune cu ce "rezoluție" să citească datele audio. Valori mai mari în acest loc pot crea un rezultat mai "jittery". Puteți experimenta pentru a afla mai târziu cea mai bună setare și lăsați-o la valoarea de bază pentru moment.
Chiar acum, nu face nimic, pentru că nu am specificat ce trebuie să facem și ce să ascultăm.
Adăugați următoarea linie la sfârșitul secțiunii Actualizați() funcția în lineVisualizer script:

transform.localPosition.y = startPosition + amplitudeData * ambalat;

Apoi, creați o sferă, denumiți-o LineVisualizer, și adăugați scriptul la acesta. Mută LineVisualizer în fața camerei.

De asemenea, trebuie să avem sunetul în scenă, așa că haideți să ajungem la asta. Creați un obiect nou și denumiți-l Sursă audio; acesta va fi "vorbitorul" care creează muzica. Puteți glisa fișierul muzical din dosarul de materiale de pe el și va începe redarea fișierului imediat la pornirea scenei.

Înainte de a încerca, totuși, setați componenta audio la juca imediat și a buclă. De asemenea, mergeți la fișierul muzical însuși și setați-l la Sunet 2D. Acest lucru va asigura ca muzica poate fi auzita la fel de bine, oriunde Sursă audio este pus. În cele din urmă, faceți un prefabricat din acesta, pentru al putea folosi mai târziu.

Dacă totul a fost configurat corect, lineVisualizer ar trebui să se deplaseze în sus și în jos. Succes! Datele audio sunt citite și aplicate într-un mod distractiv și interesant.

Acum să o facem mai frumoasă.

Creați un obiect gol și adăugați un randator de melodii la el și îl aliniați la lineVisualizer. Aceste setări ale traseului vor crea un efect frumos:

Lanțul lanțului LineVisualizer la aparatul foto, astfel încât să se miște când camera se mișcă. Setarea ar trebui să arate astfel:

Apoi, creați un mic fișier JavaScript numit rotation.js, și adăugați următorul cod:

#pragma strict var viteză: float = 15,0; funcția Actualizare () transform.Rotate (0, viteză * Timp.deltaTime, 0); 

Puneți scenariul de rotație pe cameră, astfel încât să se rotească în jurul său.

Încearcă! Sfera ar trebui să sară în sus și în jos și să traseze o linie în spatele ei.

Pentru a face mai frumos, întoarceți invizibil cubul debifând componenta de redare a ochiului de plasă și poziționați-l puțin mai jos, astfel încât să nu sară din ecran. De asemenea, setați culoarea de fundal a camerei pe negru, adăugați o lumină direcțională în scenă și dați traseului o culoare și un material drăguț.

Ar trebui să aveți un vizualizator de linie simplu, care să sară și să coboare în jos cu muzica și să traseze o linie de fixare în jurul valorii. Încercați-l în această construcție:

2. Vizualizatorul de bare

Exploatatorii de bar sunt puțin mai complicați. Vom pune câteva "baruri" alături unul de celălalt, care vor sări la muzică, fiecare în felul lor. Obținerea unui vizualizator de bare "adevărat" este mult mai complicat decât această introducere destul de simplă poate acoperi, așa că va trebui să creăm o falsă (care va arăta bine oricum).

În fișierele proiectului, veți găsi un fișier 3D cu un cub special. Nu este strict necesare, astfel încât să puteți sări peste el dacă doriți.

Creați un nou cub și schimbați cubul standard pentru cele menționate mai sus visualizerCube plasă. Cel nou are punctul său central la o margine. Când mărim cubul în timpul rulării, acesta se va deplasa într-o singură direcție.
Creați un script nou numit barVisualizer. Adăugați următorul cod:

#pragma strict public var detaliu: int = 500; public var minValue: float = 1.0; public var amplitudine: float = 0.1; private var startScale: Vector3; funcția Start () startScale = transform.localScale;  funcția Actualizare () var info: float [] = float nou [detalii]; AudioListener.GetOutputData (info, 0); var ambalatData: float = 0,0; pentru (var x: int = 0; x < info.Length; x++)  packagedData += System.Math.Abs(info[x]);  transform.localScale = new Vector3(minValue, (packagedData * amplitude) + startScale.y, minValue); 

Este similar cu lineVisualizer script, dar comenzile care ajustează poziția au fost modificate. Acum ajustează înălțimea verticală a cubului.
Creați un cub, sunați-l BarVisualizer, dați-i o culoare frumoasă și puneți scenariul pe care tocmai l-ați creat. Apoi creați mai multe copii ale acestuia și plasați-le unul lângă celălalt în fața camerei. Ar trebui să arate astfel:

Dacă încercați, veți observa că toate cuburile se mișcă în același mod. Pentru a face ca fiecare cub să crească și să se micșoreze ca barele, adaptați codul astfel încât să arate astfel:

#pragma strict public var detaliu: int = 500; public var minValue: float = 1.0; public var amplitudine: float = 0.1; privat var randomAmplitude: float = 1.0; private var startScale: Vector3; funcția Start () startScale = transform.localScale; randomAmplitude = Random.Range (0,5, 1,5);  funcția Actualizare () var info: float [] = float nou [detalii]; AudioListener.GetOutputData (info, 0); var ambalatData: float = 0,0; pentru (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); 

Acest lucru conferă fiecărui bar "puterea" proprie, cu care se mișcă. Puteți vedea efectul în această construcție:

3. Vizualizarea cu scara 3D

Acesta este un pic diferit. În loc de ajustare înălţime a unui obiect, vom arăta vizualizarea prin scalarea unui întreg obiect în sus și în jos. Acest lucru poate fi folosit pentru elemente de fundal în jocuri bazate pe muzică sau pentru ca particulele și alte efecte să se îndrepte către muzică.
Codul este aproape la fel ca barVisualizer, cu comenzile de scalare îmbunătățite și pentru scalarea în trei dimensiuni:

#pragma strict public var detaliu: int = 500; public var minValue: float = 1.0; public var amplitudine: float = 0.1; privat var randomAmplitude: float = 1.0; private var startScale: Vector3; funcția Start () startScale = transform.localScale; randomAmplitude = Random.Range (1.0, 3.0);  funcția Actualizare () var info: float [] = float nou [detalii]; AudioListener.GetOutputData (info, 0); var ambalatData: float = 0,0; pentru (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); 

Puneți-o pe o sferă (sau orice alt obiect ales de dvs.) și creați câteva copii pentru un efect frumos. Încercați-l în această construcție:

Concluzie

În acest tutorial, ați învățat cum să faceți un vizualizator audio simplu și autonom în cadrul Unity, care poate fi aplicat în multe moduri diferite. Ați putea folosi aceste tehnici pentru a proiecta lumina psihedelică care se deplasează în timp la muzică sau ca sursă de date care servește drept bază pentru un întreg joc, cum ar fi generația de nivel în Audiosurf, unde obstacolele de care aveți nevoie pentru a evita apar în timp bate. Fii salbatic!