FMOD Parameter sind nützlich, um mit Spielvariablen Veränderungen an FMOD Events zu tätigen. Wollen wir unsere Musik dynamisch verändern, oder Sounds an bestimmten Variablen koppeln, dann ist die Verwendung von Parametern wichtig.
Lade dir das Unity & FMOD Projekt zu diesem Tutorial herunter.
Inhaltsverzeichnis
Wie funktionieren FMOD Parameter in FMOD Studio?
Jedes Event beginnt mit einen Parameter, der als Timeline bezeichnet wird.
Die Timeline hat die besondere Eigenschaft des automatischen Fortschritts: Solange das Event abgespielt wird, steigt der Wert des Timeline-Parameters kontinuierlich an. Stelle dir hier die typische Zeitleiste einer DAW vor, die linear von links nach rechts geht:
Andere Parameter werden zusammenfassend als Game Parameter bezeichnet, da sie dazu dienen, den Zustand des Spiels darzustellen:
Der aktuelle Wert eines beliebigen Parameters kann im Spiel dynamisch verändert werden. Parameterwerte können auch durch Modulatoren oder durch Events gesteuert werden, die auf das Event verweisen, in dem sich der Parameter befindet. Jede Instanz eines Events kann unterschiedliche Parameterwerte haben, sodass verschiedene Instanzen desselben Events einen höchst dynamischen und vielfältigen Hörerlebnis liefern können.
Die Werte der Parameter können mithilfe von Code im Spiel aktualisiert, können aber auch durch Automatisierung eingestellt und von Modulatoren angepasst werden.
Im beigelegten Beispiel habe ich vier Parameter für ein Event erstellt, die jeweils mit FMOD Studio Effekten verbunden sind:
- Reverb: Steuert den Wet-Wert des Hall-Effekts (0-1)
- Delay: Steuert den Wet-Wert des Delay-Effekts (0-1)
- DelayTime: Steuert die Delayzeit (0-5000ms)
- Pitch: Steuert den Pitch des Events (-12st – 12st)
Schaue dir das FMOD Projekt im Assets-Ordner an, um ein Gefühl zu bekommen, wie die Parameter mit den Effekten verknüpft sind. Gehe jeweils die Game Parameter-Tabs durch und werfe ein Blick auf die Automationen.
Parameter-Typen
In der neuen FMOD Studio 2.0.0 Version wurde das bisher vorhandene Continuous Parameter durch zwei neue Parameter-Typen erweitert. Ich erkläre hier kurz was es mit den verschiedenen Parameter-Typen auf sich hat:
Continuous Parameters
Continuous Parameters sind eine Art von Parameter, die Gleitkommazahlen (float) verwenden. Jeder Parameter hat einen Minimal- und Maximalwert und kann auf jeden Fließkommawert innerhalb dieses Bereichs eingestellt werden. Wie alle Parameter können auch die kontinuierlichen Benutzerparameter so angepasst werden, dass sie jede Variable im Spielprojekt darstellen. Continuous Parameter werden am häufigsten für Variablen verwendet, die sich in sehr feinen oder beliebigen Abstufungen ändern können.
Discrete Parameters
Discrete Parameters sind eine Art von Parameter, die ganzzahlige (int) Zahlen verwenden. Jeder Discrete Parameter hat einen Minimal- und Maximalwert und kann auf einen beliebigen ganzzahligen Wert innerhalb dieses Bereichs eingestellt werden.
Labeled Parameters
Labeled Parameters sind eine Art von Parameter, die Strings verwenden. Jeder Labeled Parameter hat eine vordefinierte Liste von beschrifteten Werten und kann auf jeden dieser Werte eingestellt werden.
FMOD Parameter mit dem Studio Parameter Trigger Component verändern
Wenn wir Parameter ohne Code verändern möchten, dann können wir den Studio Parameter Trigger Component in Kombination mit dem Studio Event Emitter Component verwenden. Öffne die Parameter-Component Szene und klicke auf dem Parameter-GameObject, um einen Überblick beider Components im Inspector zu bekommen:
Wir sehen den Studio Event Emitter-Component, der beim Start der Szene ein Event abspielt, das vier Parameter in ihren Standardwerten enthält. Unterhalb befindet sich zwei Studio Parameter Trigger-Components, die als Trigger die Mouse Enter und Mouse Exit-Callbacks besitzen. Der erste Trigger Component stellt den Reverb-Parameter auf 1 und den Pitch-Parameter auf 3. Der zweite Component stellt die Parameter wieder zurück in den Standardeinstellungen. Wenn wir nun im Play-Modus mit der Maus auf dem Cube zeigen, verändern sich die Parameter auf unseren festgelegten Werten. Zeigen wir mit der Maus auf einer Stelle außerhalb des Cubes, kehren die Werte wieder in den Standardeinstellungen zurück. Probiere es aus!
FMOD Parameter mit Code verändern
Natürlich geht das Ganze auch sehr einfach in C#. Öffne die Parameter-Code Szene und den Effekte.cs Skript.
Wie im letzten Tutorial haben wir hier an erster Stelle unsere Instanz deklariert. Diesmal deklarieren wir aber auch einen String mit dem [FMODUnity.EventRef]
-Attribut, das uns das Selektieren des FMOD-Events im Inspector ermöglicht.
private FMOD.Studio.EventInstance instance;
[FMODUnity.EventRef]
public string fmodEvent;
In Folge deklarieren wir nun auch vier verschiedene Variablen, die unsere FMOD Parameter in Echtzeit verändern sollen:
[SerializeField] [Range(0f, 1f)]
private float reverb, delay;
[SerializeField] [Range(0f, 5000f)]
private float delayTime;
[SerializeField] [Range(-12f, 12f)]
private float pitch;
Das [SerializeField]
-Attribut ist dafür da, die privaten Variablen im Inspector zugänglich zu machen. Das Range[min, max]-
Attribut stellt diese Variablen mit einem Slider im Inspector dar, sodass es uns leicht macht, diese Werte zu verändern.
In Unitys Start()-Methode erstellen und starten wir unsere Instanz (beachte, wie wir hier den vorher deklarierten String als Eventpath eingeben):
void Start()
{
instance = FMODUnity.RuntimeManager.CreateInstance(fmodEvent);
instance.start();
}
Anschließend verwenden wir für jeden FMOD-Parameter in der Update()-Methode diese Codezeile, um Parameter-Veränderung durchzuführen:
instance.setParameterByName("ParameterName", wert);
Zusammengefasst sieht der Skript so aus:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Effekte : 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);
}
}
Starte die Szene und bewege nun die Slider im Inspektor.
Wie verwendet man Globale Parameter in FMOD Studio?
FMOD Studio unterstützt ab Version 2.0.0 auch Globale Parameter. Das heißt: verschiedene Events können gleiche Parameter besitzen und die Parameterveränderung wirkt sich auf alle Events aus. Früher musste man für jedes Event die Parameterveränderung einzelnd vornehmen. Um ein Global Parameter zu aktivieren, setzen wir in FMOD Studio die globale Einstellung bei der Parameterherstellung:
Globale Parameter mit dem Global Parameter Trigger Component verändern
Der Global Parameter Trigger Component verhält sich im Grunde wie der normale Parameter Trigger Component. Verwende diesen, wenn du globale Parameter ohne Code verändern möchtest. Dieser Component braucht den Studio Event Emitter nicht als Targetobjekt und man wählt den gewünschten Parameter direkt aus einer Dropdown Liste aus:
Globale Parameter mit Code verändern
Die Global Parameters werden über die System parameter API gesteuert und haben einen Einzelwert, der von allen Instanzen gemeinsam genutzt wird. Im Code sieht es so aus, dass wir die Parameter über StudioSystem direkt verändern:
FMODUnity.RuntimeManager.StudioSystem.setParameterByName("EQ Global", eq);