【发布时间】:2018-05-25 11:06:41
【问题描述】:
我目前正在开发对话系统,该系统将处理播放 npc 报价并向他们显示字幕。我遇到了引擎破坏暂停声音的问题。
它是什么样子的:
所以我创建了创建声音的函数,它看起来像这样:
UAudioComponent* UAudioController::Sound2D(UObject* WorldContextObject, class USoundBase* Sound, float VolumeMultiplier, float PitchMultiplier, float StartTime)
{
if (!Sound)
{
return nullptr;
}
UAudioComponent* AudioComponent = UGameplayStatics::CreateSound2D(WorldContextObject, Sound, VolumeMultiplier, PitchMultiplier, StartTime);
AudioComponent->bIsUISound = false;
PlaybackPositionMap.Add(AudioComponent, 0.f);
BindDelegates(AudioComponent);
AudioComponent->Play(StartTime);
return AudioComponent;
}
如您所见,PlaybackPositionMap 基本上是带有 UAudioComponent 和浮点数的 TMap。我用它来跟踪播放时间。还有一个名为 BindDelegates() 的函数,如下所示:
void UAudioController::BindDelegates(UAudioComponent* AudioComponent)
{
if (AudioComponent->IsValidLowLevel())
{
AudioComponent->OnAudioPlaybackPercent.AddDynamic(this, &UAudioController::SavePlaybackPosition);
AudioComponent->OnAudioFinished.AddDynamic(this, &UAudioController::SoundFinished);
}
}
AudioPlaybackPercent 的第一个绑定只是测量播放时间并将其保存在我的地图中。第二次绑定向我发出声音完成播放的信号,这对我很重要,这是我问题的根源。
问题: 一段时间后,当我在蓝图中使用 SetPaused 节点时,我会收到消息说我的声音已完成播放,即使它没有播放。我已经检查过了,AudioComponent 刚刚被销毁。我试过这样做:
AudioComponent->AddToRoot();
但它让我的编辑器崩溃了。有没有其他方法可以接近它?使用 CreateSound2D 有错吗?
【问题讨论】:
标签: c++ unreal-engine4