Il mixer di FMOD può essere controllato con tutte le sue funzioni in Unity. In questo tutorial controlleremo il volume degli bus, dei VCA e attiveremo gli snapshot di FMOD direttamente usando del codice C#.
Scarica il progetto Unity & FMOD per questo tutorial.
Controllo del volume degli bus di FMOD in Unity
Il volume di un bus in Unity può essere controllato in tre semplici passi:
- Dichiarazione del bus
- Richiamo del bus
- Impostazione del volume
Dichiarazione del bus
Proprio come nella creazione delle istanze degli eventi, dobbiamo prima dichiarare il bus:
FMOD.Studio.Bus bus;
Creazioni del bus
Ora possiamo richiamare il nostro bus desiderato con nella funziona Start() di Unity:
bus = FMODUnity.RuntimeManager.GetBus("bus:/MusicBus");
bus:/MusicBus
è una stringa e si riferisce ai gruppi del mixer di FMOD Studio creati nella scheda Routing. Possiamo copiare questo percorso cliccando con il tasto destro del mouse su un gruppo e selezionando l’opzione Copy Path:
Controllare il volume di un bus
Con bus.setVolume(float volume)
possiamo impostare il volume desiderato per il bus. setVolume() assume un numero in virgola mobile che va da 0 (mute) a 1 (massimo volume). Naturalmente è anche possibile lavorare con la scala in dB. Pertanto dichiariamo due variabili:
[SerializeField] [Range(-80f, 10f)]
private float busVolume;
private float volume;
busVolume è una variabile (float) che possiamo controllare tramite uno slider nell’inspector. Dovrebbe rappresentare il valore di volume in dB desiderato. Con la variabile volume usiamo una formula per convertire i dB in una scala lineare:
volume = Mathf.Pow(10.0f, busVolume / 20f);
Lo script completo per il bus è il seguente:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bus : MonoBehaviour
{
FMOD.Studio.EventInstance instance;
FMOD.Studio.Bus bus;
[FMODUnity.EventRef]
public string fmodEvent;
[SerializeField] [Range(-80f, 10f)]
private float busVolume;
private float volume;
void Start()
{
instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
instance.start();
bus = FMODUnity.RuntimeManager.GetBus("bus:/MusicBus");
}
void Update()
{
volume = Mathf.Pow(10.0f, busVolume / 20f);
bus.setVolume(volume);
}
}
Controllo del volume dei VCA di FMOD in Unity.
FMOD Studio ci dà la possibilità di associare gli bus a specifici VCA. Questa funzione risulta utile se ad esempio vogliamo controllare il volume della musica e gli effetti sonori separatamente. Dal punto di vista del codice il controllo del volume funziona esattamente come per i bus. Questa volta dichiariamo un VCA:
FMOD.Studio.VCA vca;
Invece di GetBus() utilizziamo GetVCA():
vca = FMODUnity.RuntimeManager.GetVCA("vca:/MusicVCA");
Poi usiamo di nuovo il metodo setVolume() per cambiare il volume del VCA:
vca.setVolume(volume);
Lo script completo per i VCA è il seguente:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VCA : MonoBehaviour
{
FMOD.Studio.EventInstance instance;
FMOD.Studio.VCA vca;
[FMODUnity.EventRef]
public string fmodEvent;
[SerializeField]
[Range(-80f, 10f)]
private float vcaVolume;
private float volume;
void Start()
{
instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
instance.start();
vca = FMODUnity.RuntimeManager.GetVCA("vca:/MusicVCA");
}
void Update()
{
volume = Mathf.Pow(10.0f, vcaVolume / 20f);
vca.setVolume(volume);
}
}
Attivare gli Snapshot di FMOD in Unity
Quando lavoriamo con degli snapshot, possiamo immaginare di avere a che fare con degli eventi normali. L’attivazione degli snapshot funziona esattamente come la riproduzione manuale di di eventi 2D/3D.
Dichiriamo per prima l’istanza di uno snapshot:
FMOD.Studio.EventInstance snapshot;
Dopodiché creiamo l’istanza e la riproduciamo o la fermiamo nella funzione Update() di Unity:
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
snapshot = FMODUnity.RuntimeManager.CreateInstance("snapshot:/FilterMusic");
snapshot.start();
}
else if (Input.GetKeyDown(KeyCode.LeftControl))
{
snapshot.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
snapshot.release();
}
}
Come puoi vedere qui, rispetto agli eventi normali cambia solo il percorso dell’evento. Al posto di event:/
ora usiamo snapshot:/
per puntare al percorso corretto. Dai un’occhiata al progetto allegato per sperimentare con gli snapshot.