bugfix> c++ > 投稿

私は現在、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 にリストされている他のオプションを確認することもできます。 。

あなたの答え