void FFMODStudioModule::UpdateWorldListeners(UWorld *World, int *ListenerIndex) { if (!World) { return; } float DeltaSeconds = World->GetDeltaSeconds(); for (auto Iterator = World->GetPlayerControllerIterator(); Iterator; ++Iterator) { TWeakObjectPtr LocalPlayer = *Iterator; if (LocalPlayer.IsValid()) { APlayerController* PlayerController = LocalPlayer.Get(); FVector Location; FVector ProjFront; FVector ProjRight; PlayerController->GetAudioListenerPosition(Location, ProjFront, ProjRight); FVector ProjUp = FVector::CrossProduct(ProjFront, ProjRight); FTransform ListenerTransform(FRotationMatrix::MakeFromXY(ProjFront, ProjRight)); ListenerTransform.SetTranslation(Location); ListenerTransform.NormalizeRotation(); SetListenerPosition(*ListenerIndex, World, ListenerTransform, DeltaSeconds); (*ListenerIndex)++; } } }