Ein Audio Manager Script bündelt die Audiosteuerung eines Unity-Projekts an einer zentralen Stelle. Anders als Audio Source oder Audio Listener gehört ein Audio Manager nicht zu den fest vorgegebenen Unity-Komponenten. Du entwickelst das System selbst und entscheidest, welche Aufgaben es übernimmt.
Ein einfacher Audio Manager kann Musik und Soundeffekte abspielen. In größeren Projekten kommen Lautstärkeregelung, Audio Mixer, Szenenwechsel, zufällige Soundvarianten oder gespeicherte Audioeinstellungen hinzu. Wie umfangreich der Manager ausfällt, richtet sich nach deinem Spiel.
Ein Audio Manager ist eine eigene Projektlösung
Unity stellt kein allgemeines AudioManager-Component bereit, das du lediglich zu einem GameObject hinzufügen musst. Der Begriff bezeichnet vielmehr ein selbst entwickeltes Organisationssystem für Audio.
Entsprechend unterscheiden sich Audio Manager zwischen verschiedenen Projekten deutlich. In einem kleinen Spiel genügt möglicherweise ein Script mit zwei Audio Sources. Ein umfangreicheres Projekt kann dagegen verschiedene Audiogruppen, Mixer, gespeicherte Lautstärken und zahlreiche Methoden zur Soundwiedergabe verwalten.
Der Name Audio Manager beschreibt damit eher die Aufgabe des Scripts als eine bestimmte technische Umsetzung.
Warum Audio zentral verwalten?
Ohne Audio Manager können GameObjects ihre Sounds direkt über eigene Audio Sources abspielen. Für räumliche Geräusche ist diese Struktur häufig sinnvoll. Eine Tür kann beispielsweise ihre eigene Audio Source besitzen, ebenso ein Ofen, ein Gegner oder eine Maschine.
Andere Klänge gehören dagegen nicht eindeutig zu einem Objekt innerhalb der Spielwelt. Hintergrundmusik, Menüklänge oder allgemeine Benutzeroberflächentöne lassen sich oft übersichtlicher zentral verwalten.
Ein Audio Manager stellt dafür gemeinsame Methoden bereit. Andere Scripts müssen dann nicht selbst wissen, welche Audio Source für einen bestimmten Audiotyp zuständig ist.
Audio Manager und Audio Source erfüllen unterschiedliche Aufgaben
Ein Audio Manager ersetzt die Audio Source nicht. Die Audio Source übernimmt weiterhin die eigentliche Wiedergabe eines Audio Clips. Der Manager organisiert lediglich, welche Quelle welchen Sound zu welchem Zeitpunkt abspielen soll.
Ein Manager kann dafür eine oder mehrere Audio Sources referenzieren. Eine Quelle spielt beispielsweise Hintergrundmusik ab, während eine zweite für nicht räumliche Soundeffekte zuständig ist.
Räumliche Geräusche solltest du nicht zwangsläufig über eine zentrale Audio Source abspielen. Soll ein Geräusch eindeutig aus der Position eines GameObjects kommen, ist eine Audio Source direkt an diesem Objekt oder an der entsprechenden Position häufig die passendere Lösung.
Ein einfacher Audio Manager für Unity
Für den Einstieg kannst du einen Audio Manager mit getrennten Audio Sources für Musik und Soundeffekte erstellen. Das folgende Beispiel zeigt eine bewusst einfache Variante:
using UnityEngine;
public class AudioManager : MonoBehaviour
{
public AudioSource musicSource;
public AudioSource sfxSource;
public void PlayMusic(AudioClip clip)
{
if (clip == null || musicSource == null)
{
return;
}
musicSource.clip = clip;
musicSource.loop = true;
musicSource.Play();
}
public void PlaySound(AudioClip clip)
{
if (clip == null || sfxSource == null)
{
return;
}
sfxSource.PlayOneShot(clip);
}
public void StopMusic()
{
if (musicSource != null)
{
musicSource.Stop();
}
}
}
Das Script unterscheidet zwischen einer Audio Source für Musik und einer zweiten Quelle für Soundeffekte. PlayMusic() weist der Musikquelle einen Audio Clip zu und startet die Wiedergabe als Schleife. PlaySound() verwendet dagegen PlayOneShot().
Mit PlayOneShot() kannst du einen kurzen Clip über eine Audio Source abspielen, ohne dafür den aktuell in AudioSource.clip eingetragenen Clip ersetzen zu müssen. Das eignet sich beispielsweise für Sammel-, Menü- oder Bestätigungstöne.
Den Audio Manager im Inspector einrichten
Für das Beispiel benötigst du ein GameObject, das den Audio Manager trägt. Du kannst dafür beispielsweise ein leeres GameObject mit dem Namen AudioManager erstellen.
- Erstelle ein leeres GameObject in der Hierarchy.
- Nenne es beispielsweise AudioManager.
- Füge das Script AudioManager hinzu.
- Füge zwei Audio-Source-Komponenten hinzu.
- Ziehe eine davon in das Feld Music Source.
- Weise die zweite dem Feld Sfx Source zu.
- Konfiguriere Lautstärke, Output und weitere Audio-Source-Einstellungen passend zu deinem Projekt.
Die Musikquelle und die Effektquelle lassen sich dadurch unabhängig konfigurieren. Beispielsweise kann die Musikquelle dauerhaft laufen, während die SFX-Quelle nur bei Bedarf kurze Geräusche abspielt.
Play und PlayOneShot unterscheiden
Für einen Audio Manager ist der Unterschied zwischen Play() und PlayOneShot() wichtig.
Bei Play() spielt eine Audio Source den ihr zugewiesenen clip ab. Das eignet sich beispielsweise für Musik oder länger laufende Geräusche, deren Wiedergabe du gezielt starten und stoppen möchtest.
PlayOneShot() eignet sich dagegen für einzelne Soundeffekte. Mehrere auf diese Weise gestartete Klänge können sich über dieselbe Audio Source überlagern. Das ist beispielsweise praktisch, wenn kurz nacheinander mehrere Sammelobjekte aufgenommen werden.
Bei sehr vielen gleichzeitig ausgelösten Effekten solltest du trotzdem kontrollieren, wie viele Klänge sinnvoll übereinanderliegen. Ein Audio Manager kann bei Bedarf zusätzliche Regeln einführen, damit derselbe Sound nicht unkontrolliert mehrfach startet.
Audio Clips zentral referenzieren
Neben den Audio Sources kann ein Audio Manager auch häufig verwendete Audio Clips referenzieren. Dadurch müssen andere GameObjects nicht für jeden globalen Effekt eine eigene Clip-Referenz verwalten.
Eine einfache Erweiterung könnte beispielsweise einen Clip für das Einsammeln eines Gegenstands enthalten:
public AudioClip pickupSound;
public void PlayPickupSound()
{
if (pickupSound != null && sfxSource != null)
{
sfxSource.PlayOneShot(pickupSound);
}
}
Diese Lösung eignet sich vor allem für Sounds, die an vielen Stellen des Spiels identisch verwendet werden. Bei zahlreichen Clips kann eine lange Liste öffentlicher Variablen allerdings schnell unübersichtlich werden. Dann lohnt sich eine stärker strukturierte Verwaltung.
Audio Manager über andere Scripts aufrufen
Damit andere Komponenten den Audio Manager verwenden können, benötigen sie Zugriff auf seine Instanz. Eine Möglichkeit besteht darin, eine Referenz im Inspector zuzuweisen.
using UnityEngine;
public class Pickup : MonoBehaviour
{
public AudioManager audioManager;
public AudioClip pickupSound;
private void OnTriggerEnter2D(Collider2D other)
{
if (!other.CompareTag("Player"))
{
return;
}
if (audioManager != null)
{
audioManager.PlaySound(pickupSound);
}
Destroy(gameObject);
}
}
Im Inspector weist du dem Feld audioManager das GameObject mit dem entsprechenden AudioManager-Script zu. Beim Kontakt mit einem als Player markierten Objekt startet der gewünschte Sound.
Diese Form der Referenzierung ist einfach nachzuvollziehen und macht im Inspector sichtbar, welches Objekt mit welchem Manager verbunden ist.
Muss ein Audio Manager ein Singleton sein?
Audio Manager werden häufig als Singleton umgesetzt. Dabei stellt das Script eine zentrale Instanz bereit, die andere Komponenten direkt erreichen können.
Ein Singleton ist jedoch keine Voraussetzung für einen Audio Manager. Die Architektur bringt Vor- und Nachteile mit sich. Der globale Zugriff ist bequem, erzeugt aber gleichzeitig eine starke Abhängigkeit vieler Scripts von derselben Instanz.
Für kleinere Projekte kann ein Singleton eine praktische Lösung darstellen. Bei größeren Systemen solltest du bewusst entscheiden, ob globale Zugriffe zur gewünschten Projektstruktur passen oder ob explizite Referenzen und getrennte Audiosysteme übersichtlicher bleiben.
Audio über Szenen hinweg erhalten
Hintergrundmusik soll beim Laden einer neuen Szene häufig nicht abrupt abbrechen. In solchen Fällen kann der Audio Manager mit DontDestroyOnLoad() über einen Szenenwechsel hinweg bestehen bleiben.
Dabei musst du verhindern, dass jede neue Szene eine weitere Kopie desselben Managers erzeugt. Andernfalls existieren nach mehreren Szenenwechseln möglicherweise mehrere Audio Manager und mehrere gleichzeitig laufende Musikquellen.
Eine einfache Singleton-Variante kann so aussehen:
using UnityEngine;
public class AudioManager : MonoBehaviour
{
public static AudioManager Instance;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
}
Existiert bereits eine Instanz, entfernt das Script die neu erzeugte Kopie. Die zuerst angelegte Instanz bleibt dagegen beim Laden einer anderen Szene erhalten.
Ob du diese Struktur benötigst, hängt von deinem Spiel ab. Wenn jede Szene eine vollständig eigene Audiokonfiguration besitzt, kann ein dauerhaftes AudioManager-GameObject unnötig sein.
Audio Manager und Audio Mixer kombinieren
Bei umfangreicheren Projekten kann ein Audio Mixer die zentrale Audiosteuerung ergänzen. Mit ihm lassen sich Audio Sources unterschiedlichen Mixer-Gruppen zuordnen.
Du kannst beispielsweise eigene Gruppen für Musik, Soundeffekte, Umgebung und Benutzeroberfläche anlegen. Dadurch lassen sich diese Bereiche unabhängig voneinander beeinflussen.
Der Audio Manager kann anschließend als Schnittstelle zwischen den Spieleinstellungen und dem Audio Mixer dienen. Ändert der Spieler beispielsweise die Musiklautstärke, übergibt der Manager den neuen Wert an den entsprechenden Mixer-Parameter.
Lautstärkeeinstellungen speichern
Eine Lautstärkeregelung ist besonders nützlich, wenn das Spiel die gewählten Werte auch nach einem Neustart beibehält. Der Audio Manager kann gespeicherte Einstellungen beim Start laden und an die Audio Sources oder den Audio Mixer weitergeben.
Für einfache Einstellungen lässt sich beispielsweise PlayerPrefs verwenden. Bei einem größeren Speichersystem können Audiooptionen stattdessen gemeinsam mit anderen Spieleinstellungen gesichert werden.
Die Speicherung und die eigentliche Audioausgabe sind dabei getrennte Aufgaben. Der Audio Manager muss nicht zwangsläufig selbst für das gesamte Speichersystem verantwortlich sein.
Musik wechseln, ohne sie hart abzubrechen
Ein einfacher Audio Manager stoppt einen Musikclip und startet anschließend den nächsten. Der Übergang kann dadurch abrupt wirken.
Für weichere Übergänge kannst du die Lautstärke der laufenden Musik schrittweise reduzieren, den Clip wechseln und die neue Musik anschließend wieder einblenden. Solche Übergänge lassen sich beispielsweise mit Coroutines umsetzen.
Eine weitere Möglichkeit besteht darin, zwei Musikquellen zu verwenden. Während die erste leiser wird, erhöht sich die Lautstärke der zweiten. Dadurch entsteht ein Crossfade zwischen beiden Musikstücken.
Für ein kleines Projekt ist diese zusätzliche Logik nicht zwingend notwendig. Sie wird interessant, wenn Musikwechsel einen hörbaren Teil der Inszenierung bilden.
Zufällige Soundvarianten vermeiden Wiederholungen
Wird derselbe kurze Audio Clip häufig hintereinander abgespielt, kann sich der Effekt schnell monoton anhören. Das betrifft beispielsweise Schritte, Treffer oder das Einsammeln zahlreicher gleichartiger Objekte.
Ein Audio Manager kann für solche Ereignisse mehrere Varianten speichern und bei jeder Wiedergabe einen Clip auswählen. Zusätzlich lassen sich Lautstärke oder Tonhöhe innerhalb kleiner Grenzen variieren.
Solche Veränderungen solltest du passend zum jeweiligen Geräusch einsetzen. Bei Sprachausgabe oder musikalischen Elementen kann eine zufällige Veränderung der Tonhöhe beispielsweise unerwünscht sein.
Räumliche Geräusche nicht unnötig zentralisieren
Nicht jeder Sound gehört in eine zentrale Audio Source. Bei 3D-Audio und räumlich positionierten 2D-Spielszenen ist die Position der Audio Source entscheidend für die Wahrnehmung des Geräuschs.
Ein Feuer, Wasserfall oder eine Maschine kann deshalb eine eigene Audio Source am entsprechenden GameObject besitzen. Der Audio Listener bestimmt anschließend, von welchem Hörpunkt aus der Klang wahrgenommen wird.
Der Audio Manager kann solche Quellen trotzdem organisatorisch unterstützen. Er könnte beispielsweise globale Lautstärkeeinstellungen vorgeben oder bestimmte Geräuschgruppen ein- und ausschalten. Die eigentliche Audio Source bleibt jedoch an ihrer räumlich sinnvollen Position.
Wie der Hörpunkt funktioniert, erklärt der Artikel Unity Audio Listener – der Hörpunkt deiner Szene.
Audio Manager und Benutzeroberfläche
Menüs und Benutzeroberflächen verwenden häufig kurze, nicht räumliche Soundeffekte. Dazu gehören beispielsweise Bestätigungstöne, Fehlermeldungen oder Geräusche beim Öffnen eines Menüs.
Solche Sounds eignen sich gut für eine zentrale SFX- oder UI-Audio-Source. Mehrere Buttons können dann dieselbe Wiedergabelogik verwenden, statt jeweils eine eigene Audio Source zu benötigen.
Bei größeren Benutzeroberflächen kann es trotzdem sinnvoll sein, UI-Sounds als eigene Audiogruppe zu behandeln. Der Spieler könnte ihre Lautstärke dann unabhängig von Musik und Spielgeräuschen einstellen.
Audio Manager bei einem 2D-Spiel
In einem 2D-Spiel kann ein Audio Manager beispielsweise Hintergrundmusik und wiederkehrende Soundeffekte verwalten. Nimmt die Spielfigur ein Sammelobjekt auf, kann das zuständige Gameplay-Script dem Manager mitteilen, welcher Effekt abgespielt werden soll.
Ein Ofen oder eine andere dauerhafte Geräuschquelle kann gleichzeitig eine eigene Audio Source besitzen. Dadurch bleibt die räumliche Zuordnung des Geräuschs erhalten, während globale Sounds zentral organisiert sind.
Diese Mischung aus zentraler Verwaltung und lokalen Audio Sources ist häufig sinnvoller als der Versuch, sämtliche Geräusche über ein einziges GameObject abzuspielen.
Typische Fehler bei einem Audio Manager
Ein zentraler Manager vereinfacht die Audiosteuerung nur dann, wenn seine Aufgaben klar definiert bleiben. Einige Probleme treten bei selbst entwickelten Audiosystemen besonders häufig auf.
- Mehrere Manager gleichzeitig: Bei Szenenwechseln entstehen versehentlich mehrere dauerhafte AudioManager-Objekte.
- Fehlende Audio Sources: Referenzen wurden im Inspector nicht zugewiesen.
- Zu viele Aufgaben: Der Manager übernimmt neben Audio immer mehr unabhängige Spiellogik und wird schwer wartbar.
- Räumliche Sounds am falschen Ort: Ein zentral abgespielter 3D-Sound stammt akustisch nicht von der Position des eigentlichen Objekts.
- Überlagerte Soundeffekte: Ein Ereignis löst denselben Clip innerhalb kurzer Zeit zu häufig aus.
- Musik startet nach Szenenwechsel doppelt: Ein persistenter Manager trifft auf einen weiteren Manager der neu geladenen Szene.
Bei Problemen lohnt es sich deshalb, zunächst zu prüfen, welche Audio Sources aktiv sind, welcher Manager die Wiedergabe auslöst und ob nach einem Szenenwechsel zusätzliche Instanzen entstanden sind.
Nicht jedes Projekt benötigt dieselbe Audioarchitektur
Ein Audio Manager soll die Projektstruktur vereinfachen und nicht unnötig komplizierter machen. Für einen kleinen Prototyp kann eine einzige Audio Source für Musik zusammen mit einigen lokalen Soundquellen vollständig ausreichen.
Mit wachsendem Umfang steigen die Anforderungen. Unterschiedliche Lautstärkeregler, Szenenwechsel, zahlreiche Soundeffekte und mehrere Musikstücke sprechen eher für eine zentrale Verwaltung.
Auch dann muss nicht jeder Audio Clip über denselben Manager laufen. Eine klare Trennung zwischen globalen Klängen und räumlichen Geräuschquellen hält das System übersichtlich.
Vom einfachen Script zum Audiosystem
Für den Einstieg reicht ein Audio Manager mit getrennten Quellen für Musik und Soundeffekte. Sobald dein Projekt wächst, kannst du das System schrittweise erweitern.
Audio Mixer, gespeicherte Lautstärken, Musikübergänge oder Soundvarianten solltest du erst ergänzen, wenn dein Spiel diese Funktionen benötigt. So bleibt der Aufbau nachvollziehbar und du kannst Fehler leichter eingrenzen.
Der Audio Manager bildet dabei die organisatorische Ebene. Audio Sources übernehmen die Wiedergabe, der Audio Listener bildet den Hörpunkt und ein Audio Mixer kann verschiedene Audiogruppen verarbeiten. Erst das Zusammenspiel dieser Bestandteile ergibt ein flexibles Audiosystem.
Weitere Grundlagen zu den Audiokomponenten und Funktionen der Engine findest du im Unity-Handbuch zum Audiosystem.
