【UE4 C++】播放聲音與控制音量


播放聲音

  • PlaySoundAtLocation()

    USoundCue* HitSound = LoadObject<USoundCue>(this, TEXT("SoundCue'/Game/Demo_Drone/Sound/explore_Cue.explore_Cue'"));
    if (HitSound)
    {
    UGameplayStatics::PlaySoundAtLocation(this, HitSound,SweepResult.Location);
    }
    
  • PlaySound2D()

    UGameplayStatics::PlaySound2D(GetWorld(), HitSound)
    
  • 使用組件

    • static UAudioComponent* SpawnSound2D()
    • static UAudioComponent* CreateSound2D()
    • static UAudioComponent* SpawnSoundAtLocation()
    • static UAudioComponent* SpawnSoundAttached()
  • slate 中播放聲音

    FSlateApplication::Get().PlaySound(MenuStyle->MenuBGM);
    

控制音量

  • 加載USoundCue資源 直接改變 USoundCue::VolumeMultiplier

    FSlateSound 資源亦可以強轉

    USoundCue* sound= Cast<USoundCue>(MenuStyle->StartGameSound.GetResourceObject());
    sound->VolumeMultiplier = SoundVolume;
    
  • 通過 FAudioDevice、USoundMix、USoundClass

    • Conten 下創建 USoundClass 、USoundMix資源
    • USoundMix資源屬性中添加 Sound Class Effects 元素,元素為剛創建的USoundClass 資源
    • Sound Wave 資源屬性中設置 Sound Class 為剛創建的 USoundClass
    • C++ 實現
    // .h定義
    class USoundMix* SoundMix;
    class USoundClass* MusicClass;
    class USoundClass* SoundClass;
    class FAudioDevice* AudioDevice;
    
    //.cpp 調用 初始化
    MusicClass = LoadObject<USoundClass>(nullptr,TEXT("SoundClass'/Game/Blueprints/Sound/MusicClass.MusicClass'"));
    SoundClass = LoadObject<USoundClass>(nullptr,TEXT("SoundClass'/Game/Blueprints/Sound/SoundClass.SoundClass'"));
    SoundMix = LoadObject<USoundMix>(nullptr,TEXT("SoundMix'/Game/Blueprints/Sound/SoundMix.SoundMix'"));
    AudioDevice = GEngine->GetMainAudioDeviceRaw();
    AudioDevice->PushSoundMixModifier(SoundMix);
    
    //.cpp 調用 改變音量
    AudioDevice->SetSoundMixClassOverride(SoundMix, MusicClass, MusicVolume, 1.f, 0.2f, false);
    AudioDevice->SetSoundMixClassOverride(SoundMix, SoundClass, SoundVolume, 1.f, 0.2f, false);
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM