In diesem Tutorial werden wir FMOD Game Parameters steuern, indem wir Blueprint Nodes verwenden und einfachen C++ Code schreiben.
Inhaltsverzeichnis
Vorbereitung in FMOD Studio
Erstelle ein neues Event in FMOD Studio und füge einen Continuous Parameter namens Pitch mit Werten zwischen -12 und 12 ein (entsprechend der Master-Pitch-Einstellung mappen):
Erstelle auch einen globalen Parameter namens EQ Global mit Werten zwischen 0 und 1 und füge eine Automatisierungskurve hinzu, so dass die Frequenz des Filters bei Erreichen des Wertes 1 sinkt:
Builde die Banks und öffne nun den Unreal Editor.
Steuern von FMOD Parametern mit Hilfe von Blueprints
Wir können den Event Instance Set Parameter Node verwenden, um einen Parameter einer Event Instance in Blueprints zu steuern:
Hier spielen wir das Event ab, indem wir die Taste 1 drücken. Wir überprüfen jeden Frame, ob die Event Instance gültig ist, und wenn ja, setzen wir den Parameter auf eine neue Pitch-Variable (denke daran, die Variable Instance Editable zu machen). Wir können jetzt den Parameterwert im Details-Tab des Actors ändern.
Wenn wir stattdessen den FMOD Ambient Sound Actor oder den FMODAudio Component verwenden, können wir einfach auf den FMODAudio Component verweisen und den Set Parameter Node verwenden:
Steuerung der Globalen FMOD Parameter mit Hilfe von Blueprints
Verwende den Set Global Parameter by Name Node, um Globale Parameter in einem Blueprint zu steuern:
Wir haben den vorherigen Blueprint um den Set Global Parameter by Name Node erweitert und eine neue Float-Variable namens EQ erstellt, die wir dem Feld Value hinzugefügt haben. Starte das Level und ändere die Parameter Werte im Details Tab deines Charakters/Actors.
Steuern von FMOD-Parametern in UE4 mit C++ Code
In diesem Tutorialabschnitt werden wir FMOD Parameter über die Schnittstelle mit den Blueprint-Funktionen oder den direkten Zugriff auf die Studio API von FMOD steuern.
EventInstanceSetParameter und setParameterByName
Deklariere eine float-Variable namens pitch:
UPROPERTY(EditAnywhere, Category = "FMOD", meta = (ClampMin = "-12", ClampMax = "12"))
float Pitch;
Die Pitch-Variable wird dank des EditAnywhere-Specifiers im Details Tab unseres Actors angezeigt. ClampMin und ClampMax ermöglichen es uns, den Bereich des Variablenwertes visuell einzuschränken:
Wir können nun EventInstanceSetParameter
aufrufen, um den Parameter auf unsere Pitch-Variable zu setzen:
if (UFMODBlueprintStatics::EventInstanceIsValid(InstanceWrapper))
{
UFMODBlueprintStatics::EventInstanceSetParameter(InstanceWrapper, FName("Pitch"), Pitch);
}
Alternativ ist es auch möglich, den Parameter direkt über die Studio API von FMOD zu ändern:
InstanceWrapper.Instance->setParameterByName(TCHAR_TO_UTF8(*FName("Pitch").ToString()), Pitch);
setParameterByID
Deklariere in der Header-Datei des Charakters eine FMOD_STUDIO_PARAMETER_ID
Variable :
FMOD_STUDIO_PARAMETER_ID PitchParameterId;
Wir können die Parameter-ID abrufen, indem wir die Event Description der Event Instance abrufen, danach eine Parameter Description deklarieren und die Parameter Description erhalten, indem wir die Funktion getParameterDescriptionByName
aufrufen. Wir weisen die Id der Parameter Description der Parameter-ID-Variablen zu, die wir in der Header-Datei deklariert haben:
FMOD::Studio::EventDescription* eD;
InstanceWrapper.Instance->getDescription(&eD);
FMOD_STUDIO_PARAMETER_DESCRIPTION pD;
eD->getParameterDescriptionByName(TCHAR_TO_UTF8(*FString("Pitch")), &pD);
PitchParameterId = pD.id;
Alternativ können wir auch das IFMODStudioModule Singleton verwenden, um die Event Description von einem UFMODEvent zu erhalten:
FMOD::Studio::EventDescription* eD = IFMODStudioModule::Get().GetEventDescription(Event, EFMODSystemContext::Max);
FMOD_STUDIO_PARAMETER_DESCRIPTION pD;
eD->getParameterDescriptionByName(TCHAR_TO_UTF8(*FString("Pitch")), &pD);
PitchParameterId = pD.id;
Setzen eines FMOD Global Parameter in C++
Lasst uns zuerst eine neue float-Variable in unserer Header-Datei erstellen:
UPROPERTY(EditAnywhere, Category = "FMOD", meta = (ClampMin = "0", ClampMax = "1"))
float EQ;
Diese Variable ist auch im Editor sichtbar. Danach können wir einen globalen Parameter setzen, indem wir SetGlobalParameterByName
in der Klasse des Charakters aufrufen:
UFMODBlueprintStatics::SetGlobalParameterByName(FName("EQ Global"), EQ);
Gib den obenstehenden Code in die Tick-Funktion ein und starte das Spiel. Wenn du den EQ-Schieberegler im Detail Tab des Charakters bewegst, wirst du die Parameteränderung hören.
Herzlichen Glückwunsch! Du hast gelernt, wie man FMOD-Parameter in Unreal Engine 4 steuert. Im nächsten Tutorial werfen wir einen Blick auf den FMOD Mixer in Unreal Engine 4.