私は現在、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とfloatを備えた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を使用することのせいですか?
回答 1 件
CreateSound2D
bAutoDestroy
を設定しますtrue
へAudioComponent
の作成について 。false
に設定できます 破壊されないようにするために、関数内で。また、
AudioComponent.h
にリストされている他のオプションを確認することもできます。 。