Im letzten Blogpost habe ich die für Unity vorgefertigten Skripte AkEvent und AkTriggerEnter beschrieben, die in Kombination für das Auslösen von Wwise-Events genutzt werden. Dieses Mal möchte ich einige grundlegende Skripte zur Nutzung von Wwise vorstellen.
Damit die Unity-Engine allerdings überhaupt erkennt, dass es Wwise als Audio-Engine nutzen soll, muss zunächst Wwise beim Spielstart initialisiert werden. Das wird mit dem Skript AkInitializer realisiert. Hierfür wird ein leeres GameObject benötigt, das beim Starten des Spiels bereits vorhanden ist. Das GameObject wird im Inspector von Unity mit dem AkInitializer-Skript versehen, das automatisch beim Starten des Spiels geladen wird. Während des Spiels sorgt das Skript zusätzlich dafür, dass Frame für Frame Daten an die Wwise-Engine übetragen werden und somit die Kommunikation unter den beiden Engines gewährleistet wird. Das ist eine der Grundvoraussetzungen für die Nutzung von Wwise.
Eine mit AkInitializer nah verwandte Funktion von Wwise ist das Laden von sogenannten Soundbanks. Soundbanks sind Audiodaten und Befehle, die während des Spiels in den Arbeitsspeicher geladen werden und somit unmittelbar ohne längeren Wartezeiten abgerufen werden können. Große Spiele arbeiten mit vielen Soundbanks, die abhängig von der Position des Spielers oder anderen Bedingungen einzeln geladen und wieder entladen werden. Das ermöglicht die Realisierung von großen und komplexen Spielwelten auf einem PC oder einer Konsole. Häufig wird vom Entwicklerteam ein Datenmengenlimit vorgegeben, welches das Audio-Team nicht überschreiten darf.
Das Skript für das Laden von Soundbanks heißt AkBank und kann an unterschiedlichen Stellen ausgeführt werden. In der Regel hat man immer eine Soundbank, die beim Starten des Spiels geladen wird. Weitere Soundbanks werden unter anderem geladen, wenn ein neues Gebiet betreten wird. Das Laden einer Soundbank dauert eine Weile, weshalb einige Spiele währenddessen eine Ladesequenz anzeigen. Bei der praktischen Anwendung erfordert das Skript im Unity-Inspector eine Information, wann die Soundbank geladen, wann sie entladen werden soll. Dabei muss auch bestimmt werden, welche Soundbank geladen werden soll. Es gibt noch weitere Optionen, mit welchen sich einstellen lassen, wie dekodiert und wie genau mit den Daten verfahren werden soll. Das hilft beim Datenmanagement und ist vor allem für umfangreiche Spiele mit großen Datenmengen praktisch.
Quellen:
[1] https://www.audiokinetic.com/library/edge/?source=Unity&id=class_ak_initializer.html
[2] https://www.audiokinetic.com/library/edge/?source=WwiseFundamentalApproach&id=understanding_soundbanks_understanding_soundbanks