I parametri sono utili per apportare modifiche agli eventi FMOD utilizzando le variabili di gioco. Se vogliamo creare un soundtrack dinamico, o collegare i suoni a determinate variabili: l’uso dei parametri è importante.
Scarica il progetto Unity & FMOD per questo tutorial.
Cosa sono e come funzionano i parametri FMOD in FMOD Studio?
Ogni evento inizia con un parametro chiamato Timeline.
La timeline ha la particolarità dell’avanzamento automatico: finché l’evento è in riproduzione, il valore del parametro timeline aumenta continuamente. Immagina la tipica timeline di una DAW che va linearmente da sinistra a destra:
Altri parametri sono indicati collettivamente come Game Parameters (parametri di gioco) perché sono usati per rappresentare lo stato del gioco:
Il valore corrente di qualsiasi parametro può essere modificato dinamicamente nel gioco. I valori dei parametri possono anche essere controllati da modulatori o da eventi che si riferiscono all’evento in cui si trova il parametro. Ogni istanza di un evento può avere valori di parametri diversi, per cui istanze diverse dello stesso evento possono offrire un’esperienza di ascolto molto dinamica e diversificata.
I valori dei parametri possono essere aggiornati utilizzando codice Unity, ma possono anche essere impostati attraverso automazioni o modulatori in FMOD Studio.
Nell’esempio allegato ho creato quattro parametri per un evento, ciascuno associato agli effetti di FMOD Studio:
- Reverb: Controlla il valore wet dell’effetto reverb (0-1)
- Delay: Controlla il valore wet dell’effetto delay (0-1)
- DelayTime: Controlla il tempo di delay (0-5000ms)
- Pitch: Controlla il pitch dell’evento (-12st – 12st)
Esamina il progetto FMOD nella cartella Assets per avere un’idea di come i parametri sono collegati agli effetti. Dai uno sguardo alle schede de parametri di gioco per vedere le singole automazioni.
Tipi di parametri
Nella nuova versione 2.0.0 di FMOD Studio sono stati aggiunti due nuovi tipi di parametri. Spiegherò brevemente quali parametri abbiamo a nostra disposizione:
Continuous Parameters
Continuous Parameters sono un tipo di parametro che utilizza numeri in virgola mobile (float). Ogni parametro ha un valore minimo e massimo e può essere impostato su qualsiasi valore in virgola mobile all’interno di questo intervallo. Possono essere regolati per rappresentare qualsiasi variabile nel progetto di gioco. Questi parametri sono più comunemente usati per variabili che possono cambiare in incrementi molto fini o arbitrari.
Discrete Parameters
Discrete Parameters sono un tipo di parametro che utilizza numeri interi (int). Ogni discrete parameter ha un valore minimo e massimo e può essere impostato su qualsiasi valore intero all’interno di tale intervallo.
Labeled Parameters
Labeled Parameters sono un tipo di parametro che utilizza stringhe. Ogni labeled parameter ha un elenco predefinito di valori etichettati e può essere impostato su uno di questi valori.
Modifica dei parametri FMOD con il component Studio Parameter Trigger
Se vogliamo modificare i parametri senza codice, possiamo usare il component Studio Parameter Trigger in combinazione con il component Studio Event Emitter. Apriamo la scena Parameter-Component e clicchiamo sul GameObject per avere una panoramica di entrambi i component nell’inspector di Unity:
Il component Studio Event Emitter riproduce un evento all’inizio della scena e contiene quattro parametri nei loro valori predefiniti. Di seguito sono riportati due component Studio Prameter Trigger che utilizzano come trigger le funzioni Mouse Enter e Mouse Exit. Il primo Parameter Trigger imposta il parametro Reverb al valore 1 e il parametro Pitch al valore 3. Il secondo component riporta i parametri alle loro impostazioni predefinite. Se in modalità play puntiamo con il mouse al cubo, i parametri saranno impostati ai nostri valori definiti. Se puntiamo il mouse in un punto al di fuori del cubo, i valori ritornano alle impostazioni predefinite.
Modifica dei parametri FMOD con codice C#
Naturalmente, modificare i parametri è molto semplice anche in C#. Apri la scena Parameter-Code e lo script Effetti.cs.
Come nell’ultimo tutorial abbiamo dichiarato all’inizio dello script l’istanza di un evento FMOD. Questa volta dichiariamo anche una stringa con l’attributo [FMODUnity.EventRef]
, che ci permetterà di selezionare l’evento FMOD nell’inspector di Unity.
private FMOD.Studio.EventInstance instance;
[FMODUnity.EventRef]
public string fmodEvent;
Ora dichiariamo anche quattro variabili che modificheranno i nostri parametri FMOD in tempo reale:
[SerializeField] [Range(0f, 1f)]
private float reverb, delay;
[SerializeField] [Range(0f, 5000f)]
private float delayTime;
[SerializeField] [Range(-12f, 12f)]
private float pitch;
L’attributo [SerializeField]
serve a rendere accessibili le variabili private nell’inspector. L’attributo Range[min, max]
rappresenta queste variabili con uno slider nell’inspector, facilitando la modifica dei valori.
Nel funzione Start() di Unity creiamo e avviamo la nostra istanza (si nota come inserire qui la stringa precedentemente dichiarata come percorso dell’evento):
void Start()
{
instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
instance.start();
}
Poi, per ogni parametro FMOD, usiamo questa riga di codice per apportare modifiche ai parametri nella funzione Update():
instance.setParameterByName("ParameterName", valore);
In sintesi, il codice completo:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Effetti : MonoBehaviour
{
private FMOD.Studio.EventInstance instance;
[FMODUnity.EventRef]
public string fmodEvent;
[SerializeField] [Range(0f, 1f)]
private float reverb, delay;
[SerializeField] [Range(0f, 5000f)]
private float delayTime;
[SerializeField] [Range(-12f, 12f)]
private float pitch;
void Start()
{
instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
instance.start();
}
void Update()
{
instance.setParameterByName("Reverb", reverb);
instance.setParameterByName("Delay", delay);
instance.setParameterByName("DelayTime", delayTime);
instance.setParameterByName("Pitch", pitch);
}
}
Avvia la scena e prova a spostare gli slider nell’inspector.
Come usare i parametri globali in FMOD Studio e Unity?
Dalla versione 2.0.0, FMOD Studio supporta anche i parametri globali. Ciò significa che eventi diversi possono avere gli stessi parametri e le modifiche dei parametri possono influenzare tutti gli eventi. In precedenza era necessario modificare i parametri singolarmente per ogni evento. Per attivare un parametro globale, cerca l’impostazione globale in FMOD Studio durante la creazione del parametro:
Modifica dei parametri globali con il component Global Parameter Trigger
Il component Global Parameter Trigger si comporta fondamentalmente come component Parameter Trigger. Utilizza questa opzione se desideri modificare i parametri globali senza codice. Questo component non ha bisogno di Studio Event Emitter come oggetto di destinazione e si seleziona il parametro desiderato direttamente da un elenco dropdown:
Modifica dei parametri globali con codice C#
I parametri globali sono controllati dalla System Parameter API e hanno un unico valore condiviso da tutte le istanze. Nel codice modifichiamo i parametri direttamente tramite StudioSystem:
FMODUnity.RuntimeManager.StudioSystem.setParameterByName("EQ Global", eq);