• Skip to primary navigation
  • Skip to main content

Alessandro Famà

  • Portfolio
  • Tutorials
  • Wiki
  • Über Mich
  • Impressum
  • Alessandro Famà
  • Tutorials
  • FMOD + Unity Tutorials
  • FMOD Mixer in Unity bedienen

    Der FMOD Mixer kann mit all seinen Funktionen in Unity gesteuert werden. In diesem Tutorial verändern wir die Lautstärke von Bussen, VCAs und triggern Snapshots direkt aus Unity heraus.

    Lade dir das Unity & FMOD Projekt zu diesem Tutorial herunter.

    Inhaltsverzeichnis

    • FMOD Studio Bus Lautstärke in Unity kontrollieren
      • Bus Deklarieren
      • Bus abrufen
      • Lautstärke einstellen
    • FMOD Studio VCA Lautstärke in Unity kontrollieren
    • FMOD Mixer-Snapshots in Unity triggern

    FMOD Studio Bus Lautstärke in Unity kontrollieren

    Die Lautstärke eines Busses in Unity kontrolliert man mit drei einfachen Schritten:

    1. Bus deklarieren
    2. Bus abrufen
    3. Lautstärke bzw. Volume einstellen

    Schauen wir uns diese Schritte genauer an.

    Bus Deklarieren

    Genauso wie bei einfachen Instanzen, müssen wir an erster Stelle den Bus deklarieren:

    FMOD.Studio.Bus bus;

    Bus abrufen

    Nun können wir in Unitys Start()-Methode unseren gewünschten Bus abrufen:

    bus = FMODUnity.RuntimeManager.GetBus("bus:/MusicBus");

    bus:/MusicBus ist ein String und bezieht sich auf die Groups im FMOD Studio Mixer, die im Routing-Tab erstellt werden. Wir können diesen Path durch ein Klick mit der rechten Maustaste auf dem Group und der Option „Copy Path“ kopieren:

    FMOD Studio Bus "Copy Path"
    FMOD Studio Bus „Copy Path“

    Lautstärke einstellen

    Mit bus.setVolume(float volume) in der Update()-Funktion können wir nun unsere gewünschte Laustärke für den Bus einstellen. setVolume() nimmt eine Float-Zahl an, die von 0 (stumm) bis 1 (volle Lautstärke) geht. Natürlich ist es uns auch möglich mit der dB-Skala zu arbeiten. Dafür deklarieren wir zwei Floats:

    [SerializeField] [Range(-80f, 10f)]
    private float busVolume;
    private float volume;

    busVolume ist ein Float, den wir über ein Slider im Inspektor kontrollieren können. Es soll unseren gewünschten dB-Lautstärke-Wert darstellen. Mit volume nutzen wir eine Formel, um dB in einer linearen Skala umzuwandeln:

    volume = Mathf.Pow(10.0f, busVolume / 20f);

    Der vollständige Skript für den Bus sieht folgendermaßen aus:

    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);
        }
    }

    FMOD Studio VCA Lautstärke in Unity kontrollieren

    FMOD Studio gibt uns die Möglichkeit, Busse an bestimmten VCAs zu koppeln. Das ist z.B. nützlich, wenn wir die Lautstärke von Musik und Sound Effekte separat regeln möchten. Aus der Code-Perspektive funktioniert die Lautstärkeeinstellung genauso wie bei den Bussen. Wir deklarieren diesmal aber einen VCA:

    FMOD.Studio.VCA vca;

    Statt GetBus() verwenden wir GetVCA():

    vca = FMODUnity.RuntimeManager.GetVCA("vca:/MusicVCA");

    Anschließend verwenden wir wieder die setVolume()-methode, um die Lautstärke des VCAs zu ändern:

    vca.setVolume(volume);

    Der vollständige Skript für die VCAs sieht so aus:

    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);
        }
    }

    FMOD Mixer-Snapshots in Unity triggern

    Snapshots kann man sich im Grunde wie ganz normalen Events vorstellen. Das Triggern von Snapshots erfolgt wie das manuelle Abspielen von 2D/3D Events.

    Zuerst deklarieren wir die Snapshot-Instanz:

    FMOD.Studio.EventInstance snapshot;

    Danach erstellen wir die Instanz und spielen bzw. stoppen diese in Unitys Update()-Methode:

    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();
            }
        }

    Wie du hier siehst, verändert sich nur der Pfad des Events. An Stelle von event:/ verwenden wir nun snapshot:/, um auf den korrekten Pfad hinzuweisen. Schaue dir die beigelegten Projekte an, um selbst mit den Snapshots zu experimentieren.