Das Audiosystem von Unity ermöglicht die Wiedergabe und Verarbeitung von Musik, Soundeffekten, Stimmen und Umgebungsgeräuschen. Neben einfachen Klängen unterstützt die Engine auch räumliche Audioquellen, Lautstärkeregelungen, Audiomischung und die Steuerung von Geräuschen über C#-Scripts.
In einem Spiel erfüllt Audio unterschiedliche Aufgaben. Musik unterstützt die Atmosphäre, Soundeffekte geben Rückmeldung auf Aktionen und räumliche Geräusche helfen bei der Orientierung innerhalb der Spielwelt. Damit diese Elemente zusammenarbeiten, stellt Unity mehrere Komponenten bereit, die jeweils unterschiedliche Aufgaben übernehmen.
Wie funktioniert das Audiosystem von Unity?
Das Audiosystem verarbeitet Audiodaten aus importierten Dateien und gibt sie über die Audioausgabe des Spiels wieder. Eine grundlegende Konfiguration besteht aus einem Audio Clip, einer Audio Source und einem Audio Listener.
Der Audio Clip enthält die Audiodaten. Die Audio Source spielt sie ab und bestimmt Eigenschaften wie Lautstärke, Tonhöhe oder räumliche Positionierung. Der Audio Listener dient als Hörpunkt, von dem aus Unity räumliche Geräusche bewertet.
Optional kann ein Audio Mixer die Signale verschiedener Quellen zusammenführen, ihre Lautstärke verändern und zusätzliche Effekte anwenden. Scripts steuern schließlich, wann bestimmte Klänge starten, pausieren oder enden.
Audio Clips als Grundlage der Klangwiedergabe
Ein Audio Clip enthält die Audiodaten eines Geräuschs oder Musikstücks. Unity kann unterschiedliche Audiodateiformate importieren, darunter WAV, MP3 und Ogg Vorbis.
Nach dem Import erscheint die Datei im Project-Fenster als Audio Clip. Im Inspector kannst du Einstellungen für die Verarbeitung und Speicherung festlegen.
Ein Audio Clip spielt sich nicht selbst ab. Für die Wiedergabe benötigst du beispielsweise eine Audio Source, die den Clip referenziert oder ihn über ein Script erhält.
Importeinstellungen für Audiodateien
Unity bietet verschiedene Importoptionen, die Einfluss auf Speicherverbrauch, Ladeverhalten und Klangqualität nehmen. Welche Einstellungen sinnvoll sind, hängt von der Länge des Clips und seiner Verwendung ab.
Ein kurzer Sammelsound stellt andere Anforderungen als ein mehrminütiges Musikstück. Während ein kurzer Effekt möglichst schnell verfügbar sein soll, kann bei langer Hintergrundmusik ein speicherschonender Umgang mit den Audiodaten wichtiger sein.
Load Type: Decompress On Load, Compressed In Memory und Streaming
Die Einstellung Load Type bestimmt, wie Unity Audiodaten während des Spiels bereitstellt.
Bei Decompress On Load werden die Audiodaten beim Laden dekomprimiert. Das kann die CPU-Belastung während der Wiedergabe reduzieren, benötigt allerdings mehr Arbeitsspeicher.
Compressed In Memory hält die Daten komprimiert im Speicher. Während der Wiedergabe müssen sie dekodiert werden. Dadurch sinkt der Speicherbedarf, während zusätzliche Rechenarbeit entstehen kann.
Mit Streaming liest Unity die Audiodaten während der Wiedergabe fortlaufend ein. Das eignet sich insbesondere für längere Musikstücke, da nicht der gesamte dekomprimierte Clip gleichzeitig im Arbeitsspeicher liegen muss.
Welche Methode die beste Wahl darstellt, hängt von der Zielplattform, der Anzahl gleichzeitiger Sounds und den verfügbaren Ressourcen ab.
Audio Source – die Klangquelle innerhalb der Szene
Die Audio Source übernimmt die Wiedergabe eines Audio Clips. Du kannst sie einem GameObject hinzufügen und im Inspector konfigurieren.
Zu ihren wichtigsten Einstellungen gehören Audio Clip, Play On Awake, Loop, Volume, Pitch und Spatial Blend. Weitere Optionen beeinflussen die räumliche Wiedergabe, die Priorität und die Verarbeitung des Signals.
Eine Audio Source kann beispielsweise auf einem GameObject für Hintergrundmusik liegen. Ebenso kann ein Gegner eine eigene Audio Source besitzen, über die Schritte oder Angriffsgeräusche erklingen.
Die einzelnen Eigenschaften behandelt der Artikel Unity Audio Source – Sounds und Musik in der Szene abspielen.
Audio Listener – der Hörpunkt der Spielwelt
Der Audio Listener bildet den Hörpunkt innerhalb der Unity-Szene. In vielen Projekten befindet sich diese Komponente auf der Main Camera.
Bei räumlichen Geräuschen berücksichtigt Unity die Position und Ausrichtung des Audio Listeners relativ zu den Audio Sources. Dadurch können Geräusche aus unterschiedlichen Richtungen wahrgenommen werden und mit zunehmender Entfernung leiser erscheinen.
Normalerweise sollte zur Laufzeit genau ein Audio Listener aktiv sein. Mehrere gleichzeitig aktive Listener führen in einer gewöhnlichen Unity-Audiokonfiguration zu einer Warnung.
Wie diese Komponente funktioniert, erfährst du im Artikel Unity Audio Listener – der Hörpunkt deiner Szene.
Der Unterschied zwischen 2D- und 3D-Audio
Unity unterscheidet bei der Wiedergabe zwischen nicht räumlichem und räumlichem Audio. Diese Unterscheidung erfolgt hauptsächlich über die Einstellung Spatial Blend einer Audio Source.
Bei 2D-Audio spielt die Position der Klangquelle innerhalb der Szene für die gewöhnliche entfernungsabhängige Wiedergabe keine entsprechende Rolle. Das eignet sich für Musik, Menüsounds oder andere Klänge, die unabhängig vom Standort des Spielers hörbar bleiben sollen.
Bei 3D-Audio beeinflusst die räumliche Beziehung zwischen Audio Source und Audio Listener die Wiedergabe. Dazu gehören insbesondere die Entfernung und die Richtung der Klangquelle.
Spatial Blend erlaubt auch Zwischenwerte. Damit lassen sich Eigenschaften der 2D- und 3D-Wiedergabe kombinieren.
Räumliches Audio in einem 2D-Spiel
Ein zweidimensional dargestelltes Spiel muss nicht ausschließlich 2D-Audio verwenden. Auch in einem 2D-Plattformer kannst du Geräusche räumlich positionieren.
Ein Ofen, eine Maschine oder ein Wasserfall kann beispielsweise eine eigene Audio Source besitzen. Je nachdem, wie weit sich der Audio Listener von der Quelle entfernt, verändert sich die wahrgenommene Lautstärke.
Wichtig ist dabei die räumliche Anordnung. Auch wenn die Spielfigur nur auf der X- und Y-Achse läuft, besitzen ihre GameObjects weiterhin Z-Koordinaten. Die Position des Audio Listeners auf der Kamera kann deshalb den Abstand zu den Klangquellen beeinflussen.
Für Hintergrundmusik und allgemeine Benutzeroberflächentöne ist dagegen häufig eine vollständig nicht räumliche Wiedergabe sinnvoll.
Entfernung und Lautstärke mit Volume Rolloff
Bei räumlichen Audio Sources bestimmt Volume Rolloff, wie sich die Lautstärke mit zunehmender Entfernung verändert.
Die Einstellungen Min Distance und Max Distance beeinflussen dabei den Bereich der Entfernungsabschwächung. Die genaue Wirkung hängt vom gewählten Rolloff-Modell ab.
Ein kleines Feuer kann beispielsweise nur in unmittelbarer Nähe deutlich hörbar sein. Eine große Maschine darf dagegen bereits aus größerer Entfernung wahrgenommen werden.
Mit einem eigenen Rolloff-Verlauf kannst du die Lautstärkeentwicklung zusätzlich an deine Spielwelt anpassen.
Doppler-Effekt und bewegte Klangquellen
Unity unterstützt einen Doppler-Effekt für räumliche Geräusche. Dieser kann die wahrgenommene Tonhöhe beeinflussen, wenn sich Audio Source und Audio Listener relativ zueinander bewegen.
Ein schnell vorbeifahrendes Fahrzeug kann dadurch anders klingen als eine stehende Klangquelle. Über den Doppler Level einer Audio Source lässt sich die Stärke des Effekts beeinflussen.
Bei vielen ruhigen 2D-Spielen ist der Effekt nicht notwendig. Dort kann es sinnvoll sein, ihn zu reduzieren oder vollständig zu deaktivieren.
Audio Mixer – verschiedene Klänge gemeinsam verwalten
Der Audio Mixer ermöglicht eine gemeinsame Verarbeitung mehrerer Audio Sources. Dazu werden Audioquellen verschiedenen Mixer-Gruppen zugeordnet.
Du kannst beispielsweise Gruppen für Hintergrundmusik, Soundeffekte, Stimmen und Umgebungsgeräusche erstellen. Jede Gruppe lässt sich unabhängig in ihrer Lautstärke beeinflussen.
Darüber hinaus unterstützt der Audio Mixer Effekte und die Weiterleitung von Audiosignalen zwischen Gruppen. Er eignet sich deshalb nicht nur als Lautstärkeregler, sondern auch zur Organisation komplexerer Klangverarbeitung.
Mixer-Gruppen und Lautstärkeeinstellungen
Viele Spiele bieten getrennte Lautstärkeregler für Musik und Soundeffekte. Mit einem Audio Mixer lässt sich diese Trennung zentral umsetzen.
Die Audio Sources werden dazu den passenden Mixer-Gruppen zugewiesen. Ändert der Spieler die Musiklautstärke, kann das Spiel den entsprechenden Gruppenparameter verändern, ohne jede Musikquelle einzeln anpassen zu müssen.
Für eine Steuerung über Scripts lassen sich geeignete Mixer-Parameter freigeben. Diese sogenannten Exposed Parameters können anschließend über C# angesprochen werden.
Lautstärke mit einem Audio Mixer per Script steuern
Das folgende Beispiel verändert einen zuvor im Audio Mixer freigegebenen Parameter namens MusicVolume:
using UnityEngine;
using UnityEngine.Audio;
public class MusicVolumeControl : MonoBehaviour
{
public AudioMixer audioMixer;
public void SetMusicVolume(float volume)
{
if (audioMixer == null)
{
return;
}
float safeVolume = Mathf.Clamp(volume, 0.0001f, 1f);
float decibels = Mathf.Log10(safeVolume) * 20f;
audioMixer.SetFloat("MusicVolume", decibels);
}
}
Die Methode erwartet einen linearen Lautstärkewert zwischen 0 und 1. Da Audio Mixer ihre Lautstärkeparameter in Dezibel verarbeiten, erfolgt eine Umrechnung mit dem Logarithmus.
Ein Wert von 1 entspricht dabei 0 dB. Kleinere Werte reduzieren die Lautstärke. Der Mindestwert verhindert, dass bei der Berechnung der Logarithmus von null verwendet wird.
Damit das Beispiel funktioniert, musst du den Lautstärkeparameter im Audio Mixer unter dem Namen MusicVolume freigeben und den Mixer im Inspector zuweisen.
Audio Mixer Snapshots für unterschiedliche Spielsituationen
Ein Audio Mixer unterstützt außerdem Snapshots. Damit kannst du unterschiedliche Zustände der Audiomischung speichern und zwischen ihnen wechseln.
Beispielsweise kann die Musik während eines Dialogs leiser sein als im gewöhnlichen Spielablauf. Ein Snapshot speichert die dafür vorgesehenen Mixereinstellungen.
Beim Wechsel zwischen Snapshots lassen sich bestimmte Parameter über einen Zeitraum hinweg verändern. Dadurch entstehen weichere Audioübergänge, ohne dass du jede Lautstärkeänderung einzeln programmieren musst.
Audioeffekte und Filter
Unity bietet verschiedene Möglichkeiten zur Bearbeitung von Audiosignalen. Dazu gehören beispielsweise Filter und Effekte, die bestimmte Frequenzen verändern oder räumliche Eindrücke unterstützen.
Ein Low Pass Filter schwächt hohe Frequenzen ab. Damit lässt sich beispielsweise ein gedämpfter Klang erzeugen, wenn sich eine Geräuschquelle hinter einer geschlossenen Tür befindet.
Ein High Pass Filter reduziert dagegen tiefe Frequenzanteile. Weitere Effekte wie Reverb können einen Nachhall erzeugen.
Solche Veränderungen sollten gezielt eingesetzt werden. Zu viele gleichzeitig aktive Effekte können sowohl die Klangverständlichkeit als auch die Performance beeinträchtigen.
Reverb und akustische Räume
Mit Reverb lässt sich Nachhall simulieren. Dadurch können Geräusche beispielsweise in einer großen Halle anders wirken als in einem kleinen Raum.
Unity unterstützt entsprechende Audioeffekte und Reverb Zones. Eine Reverb Zone kann eine räumliche Zone definieren, in der sich die Nachhallverarbeitung entsprechend der Konfiguration verändert.
Für ein Spiel mit verschiedenen Innen- und Außenbereichen kann das interessant sein. Ein Geräusch in einer Höhle darf beispielsweise stärker nachhallen als dasselbe Geräusch auf einer offenen Wiese.
Audio über C#-Scripts steuern
Viele Klänge sollen erst bei bestimmten Ereignissen abgespielt werden. Unity stellt dafür Methoden bereit, mit denen du Audio Sources aus eigenen Scripts heraus steuerst.
Das folgende Beispiel startet den zugewiesenen Audio Clip:
using UnityEngine;
public class SoundPlayer : MonoBehaviour
{
public AudioSource audioSource;
public void PlaySound()
{
if (audioSource != null)
{
audioSource.Play();
}
}
public void StopSound()
{
if (audioSource != null)
{
audioSource.Stop();
}
}
}
Mit Play() startest du die Wiedergabe des eingetragenen Clips. Stop() beendet sie. Zusätzlich stehen unter anderem Pause() und UnPause() zur Verfügung.
Kurze Soundeffekte mit PlayOneShot
Für kurze Soundeffekte eignet sich häufig PlayOneShot(). Die Methode spielt einen übergebenen Audio Clip ab, ohne den dauerhaft in der Audio Source eingetragenen Clip ersetzen zu müssen.
using UnityEngine;
public class CollectSound : MonoBehaviour
{
public AudioSource audioSource;
public AudioClip collectClip;
public void PlayCollectSound()
{
if (audioSource != null && collectClip != null)
{
audioSource.PlayOneShot(collectClip);
}
}
}
Diese Methode eignet sich beispielsweise für das Einsammeln von Gegenständen, Treffer oder kurze Rückmeldungen der Benutzeroberfläche.
Mehrere mit PlayOneShot() gestartete Klänge können sich überlagern. Bei häufig ausgelösten Ereignissen solltest du deshalb darauf achten, dass nicht zu viele identische Geräusche gleichzeitig abgespielt werden.
Audio Manager – die zentrale Steuerung des Audiosystems
Ein Audio Manager ist ein selbst entwickeltes Script, das verschiedene Audiofunktionen zentral organisiert. Unity stellt dafür keine einzelne, fest vorgegebene AudioManager-Komponente bereit.
Ein Audio Manager kann beispielsweise Hintergrundmusik starten, Soundeffekte auslösen, Lautstärkeeinstellungen verwalten und Musikwechsel organisieren.
Die eigentliche Wiedergabe erfolgt weiterhin über Audio Sources. Der Manager entscheidet lediglich, welche Quelle zu welchem Zeitpunkt verwendet wird.
Wie du eine solche Struktur aufbaust, erklärt der Artikel Unity Audio Manager Script – Sounds zentral verwalten.
Musik bei einem Szenenwechsel erhalten
In vielen Spielen soll Hintergrundmusik beim Laden einer neuen Szene weiterlaufen. Dafür kannst du ein GameObject mit einer Audio Source über den Szenenwechsel hinweg erhalten.
Unity stellt dafür die Methode DontDestroyOnLoad() bereit. Sie verhindert, dass ein entsprechend vorbereitetes GameObject beim Laden einer anderen Szene automatisch zerstört wird.
Wichtig ist, dass dadurch nicht mehrere identische AudioManager-Objekte entstehen. Andernfalls kann dieselbe Musik nach mehreren Szenenwechseln mehrfach abgespielt werden.
Musikübergänge und Crossfades
Ein direkter Wechsel zwischen zwei Musikstücken kann abrupt wirken. Für weichere Übergänge kannst du die Lautstärke des ersten Clips reduzieren und anschließend das neue Musikstück einblenden.
Ein Crossfade verwendet häufig zwei Audio Sources. Während die erste Quelle leiser wird, erhöht sich die Lautstärke der zweiten.
Solche Übergänge eignen sich beispielsweise für einen Wechsel zwischen Erkundung und Kampf oder für den Übergang von einem Menü zur eigentlichen Spielszene.
Zufällige Soundvarianten für mehr Abwechslung
Wiederholt sich ein kurzer Sound häufig, kann das schnell künstlich wirken. Bei Schritten, Treffern oder Sammelgeräuschen lassen sich deshalb mehrere Audio Clips für dasselbe Ereignis verwenden.
Ein Script kann zufällig eine Variante auswählen. Zusätzlich lassen sich Tonhöhe und Lautstärke innerhalb kleiner Grenzen verändern.
Dadurch klingen wiederholte Aktionen abwechslungsreicher. Bei Musik und Sprachausgabe sind zufällige Tonhöhenänderungen dagegen meist nicht sinnvoll.
Performance und Speicherverbrauch des Audiosystems
Auch Audio benötigt Rechenleistung und Arbeitsspeicher. Besonders viele gleichzeitig abgespielte Geräusche, umfangreiche Audiodateien oder aufwendige Effekte können die Performance beeinflussen.
Bei der Optimierung solltest du deshalb nicht nur die Anzahl der Audio Sources betrachten. Auch die Importformate, der Load Type, die Kompression und die Zahl gleichzeitig aktiver Audiostimmen spielen eine Rolle.
Kurze Effekte profitieren häufig davon, schnell verfügbar zu sein. Lange Musikstücke können dagegen von Streaming profitieren. Die passende Einstellung hängt vom jeweiligen Einsatz und der Zielplattform ab.
Audio-Prioritäten und virtuelle Stimmen
Unity unterscheidet zwischen tatsächlich verarbeiteten Audiostimmen und weiteren Quellen, deren Wiedergabezustand zwar verwaltet wird, die aber nicht gleichzeitig als physische Stimmen ausgegeben werden.
Wenn sehr viele Audio Sources gleichzeitig aktiv sind, kann Unity anhand verschiedener Kriterien entscheiden, welche Klänge tatsächlich ausgegeben werden. Dazu gehört auch die Priority-Einstellung der Audio Source.
Ein niedrigerer Priority-Wert bedeutet dabei eine höhere Priorität. Besonders wichtige Klänge können dadurch bevorzugt behandelt werden.
Die allgemeinen Audioeinstellungen des Projekts findest du in Unity 2021.1 unter Edit > Project Settings > Audio. Dort lassen sich unter anderem Einstellungen zur Audioausgabe und zur Anzahl der Audiostimmen überprüfen.
Audio im Unity Profiler untersuchen
Der Unity Profiler hilft dir dabei, die Audioverarbeitung während des Spiels zu untersuchen. Das Audio-Modul stellt Informationen bereit, die bei der Suche nach Leistungsproblemen hilfreich sind.
Du kannst damit beispielsweise prüfen, wie viele Audio Sources beziehungsweise Stimmen aktiv sind und wie sich die Audiowiedergabe auf die Ressourcen auswirkt.
Gerade bei umfangreichen Szenen mit zahlreichen Umgebungsgeräuschen lohnt sich diese Kontrolle. So kannst du erkennen, ob tatsächlich das Audiosystem einen relevanten Anteil an einem Performanceproblem besitzt.
Typische Fehler im Unity-Audiosystem
Wenn ein Geräusch nicht hörbar ist, muss die Ursache nicht zwangsläufig bei der Audiodatei liegen. Häufig sind Einstellungen der Audio Source, des Audio Listeners oder des Audio Mixers verantwortlich.
- Kein Audio Clip zugewiesen: Die Audio Source besitzt keine Audiodaten für die vorgesehene Wiedergabe.
- Audio Source deaktiviert: Die Komponente oder das zugehörige GameObject ist nicht aktiv.
- Kein aktiver Audio Listener: Der Szene fehlt der benötigte Hörpunkt.
- Mehrere aktive Audio Listener: Unity meldet eine problematische Konfiguration.
- Zu geringe Lautstärke: Die Audio Source oder eine Mixer-Gruppe ist stummgeschaltet beziehungsweise stark reduziert.
- Falsche Entfernung: Bei 3D-Audio befindet sich der Audio Listener außerhalb des sinnvoll hörbaren Bereichs.
- GameObject zu früh zerstört: Eine Audio Source verschwindet, bevor ihr Sound vollständig abgespielt wurde.
- Mehrere Musikquellen: Nach einem Szenenwechsel existieren versehentlich mehrere AudioManager-Instanzen.
Eine systematische Fehlersuche beginnt am besten bei der Audio Source. Kontrolliere anschließend den Audio Listener, mögliche Mixer-Zuordnungen und die Scripts, die den Klang auslösen.
Das Audiosystem bei der Entwicklung eines 2D-Spiels
Bei einem 2D-Spiel kann das Audiosystem unterschiedliche Aufgaben übernehmen. Eine Hintergrundmusik läuft beispielsweise dauerhaft, während Sammelobjekte kurze Effekte auslösen. Ein Ofen kann ein wiederholtes Geräusch abspielen, das bei zunehmender Entfernung leiser wird.
Für diese Kombination benötigst du nicht zwangsläufig eine komplizierte Architektur. Eine zentrale Musikquelle, einige gezielt eingesetzte Audio Sources und ein Audio Listener auf der Main Camera können bereits ausreichen.
Erst wenn zusätzliche Anforderungen entstehen, lohnt sich die Erweiterung um einen Audio Manager, Mixer-Gruppen oder komplexere Übergänge.
Welche Audiokomponenten benötigt dein Spiel?
Für eine einfache Audiowiedergabe genügen in Unity häufig ein Audio Clip, eine Audio Source und ein aktiver Audio Listener. Diese Komponenten bilden die Grundlage für Musik und Soundeffekte.
Ein Audio Mixer erweitert das System um gemeinsame Lautstärkeregelungen und Effekte. Ein selbst entwickelter Audio Manager kann die Wiedergabe verschiedener Klänge zentral organisieren.
Welche Komponenten du tatsächlich benötigst, hängt von der Gestaltung deines Spiels ab. Entscheidend ist, die Aufgaben voneinander zu unterscheiden: Audio Clips enthalten die Klänge, Audio Sources spielen sie ab, der Audio Listener definiert den Hörpunkt und zusätzliche Systeme übernehmen die Organisation und Verarbeitung.
Weitere technische Grundlagen findest du im offiziellen Unity-Handbuch zum Audiosystem.
