0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE5】【C++】UnrelC++で設定画面の音量調整機能を作る

0
Last updated at Posted at 2026-09-01

今回は、Unreal Engine 5で音量調整機能を作る方法を解説します。

1. 完成物

最初に、完成の動画を貼付します。

ChatGPTに各機能の関係性についてまとめてもらいました。

ChatGPT Image 2026年9月1日 23_39_27.png

ソースは以下

クラス:GameMode

//=======================================================
h

class BLOG_API ABlogGameMode : public AGameModeBase
{
	GENERATED_BODY()
private:
	void BeginPlay() override;

	void CreateMainHUD();

	UFUNCTION()
	void OnChangedSliderValue(float InValue);
	
private:
	UPROPERTY()
	TObjectPtr<class UMainHUD> MainHUD_UI;

	UPROPERTY(EditDefaultsOnly)
	TSubclassOf<UMainHUD> MainHUDClass;

	UPROPERTY(EditDefaultsOnly, Category = "Sound")
	TObjectPtr<class USoundClass> BGM_SoundClass;

	UPROPERTY(EditDefaultsOnly, Category = "Sound")
	TObjectPtr<class USoundMix> SoundMix;
};

//=======================================================
cpp

void ABlogGameMode::BeginPlay()
{
	//HUD
	CreateMainHUD();

	if (IsValid(MainHUD_UI) == false)
	{
		return;
	}

	MainHUD_UI->Init();
	MainHUD_UI->OnChangedSliderValueDelegate.AddDynamic(this, &ABlogGameMode::OnChangedSliderValue);

	UGameplayStatics::PushSoundMixModifier(
		GetWorld(),
		SoundMix
	);
}

void ABlogGameMode::CreateMainHUD()
{
	APlayerController* PC = UGameplayStatics::GetPlayerController(GetWorld(), 0);

	if (IsValid(PC) == false)
	{
		return;
	}

	//MainHUDを生成
	MainHUD_UI = Cast<UMainHUD>(CreateWidget(PC, MainHUDClass));

	if (IsValid(MainHUD_UI) == false)
	{
		return;
	}

	//画面上に表示
	MainHUD_UI->AddToViewport(0);
}

/// <summary>
/// スライダーが変更された時
/// </summary>
/// <param name="InValue"></param>
void ABlogGameMode::OnChangedSliderValue(float InValue)
{
	UGameplayStatics::SetSoundMixClassOverride(
		GetWorld(),
		SoundMix,
		BGM_SoundClass,
		InValue,
		1.0f,
		0.0f,
		true
	);
}

クラス:MainHUD

//=======================================================
h

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnChangedSliderValueEvent, float, InValue);

UCLASS()
class BLOG_API UMainHUD : public UUserWidget
{
	GENERATED_BODY()
	
public:
	void Init();

	FOnChangedSliderValueEvent OnChangedSliderValueDelegate;

private:
	UFUNCTION()
	void OnChangedSliderValue(float InValue);

private:
	UPROPERTY(meta = (BindWidget))
	TObjectPtr<class USlider> BGM_Slider;

	UPROPERTY(meta = (BindWidget))
	TObjectPtr<class UTextBlock> SliderValueText;
};

//=======================================================
cpp

void UMainHUD::Init()
{
	BGM_Slider->OnValueChanged.AddDynamic(this, &UMainHUD::OnChangedSliderValue);
}

void UMainHUD::OnChangedSliderValue(float InValue)
{
	//小数点第1まで表示
	FNumberFormattingOptions Options;
	Options.MinimumFractionalDigits = 0;
	Options.MaximumFractionalDigits = 0;

	FText NextSliderText = FText::AsNumber(InValue * 100, &Options);

	//値をセット
	SliderValueText->SetText(NextSliderText);

	//Sliderの値が変更されたことを通知する
	OnChangedSliderValueDelegate.Broadcast(InValue);
}

2.解説

右クリックで、「SoundClassMix」と「SoundClass」を用意します。

image.png

音量を調節する「SoundCue」に「SoundClass」を設定します。
image.png

BGMのような長い曲の場合、「PlayWhenSilent」に変更しましょう。
UEは音量を0にすると、再生中の曲が「停止」されます。
それを防ぐために変更すると扱いやすくなります。
image.png

PushSoundMixModifier() でSoundMixを有効化します。

//SoundMixを有効にする
UGameplayStatics::PushSoundMixModifier(
	GetWorld(),
	SoundMix
);

この関数に値をセットして、音量を調節します。
SetSoundMixClassOverride() でそのSoundMix内のSoundClass設定を動的に上書きします

UGameplayStatics::SetSoundMixClassOverride(
    GetWorld(),          // 対象のWorld
    SoundMix,            // 変更を適用するSoundMix
    SoundClass,      // 音量を変更する対象のSoundClass
    Value,             // Volume倍率(0.0 = 無音、1.0 = 通常音量)
    1.0f,                // Pitch倍率(1.0 = 通常の高さ)
    0.0f,                // 設定値へ変化するまでの時間(秒)
    true                 // SoundMixに未登録のSoundClassでもOverrideを追加するか
);

なので、初期化で以下のようにかけば、ゲーム開始時に保存済みの音量を適用できます。

//セーブデータから保存してるBGMのボリュームを取得
float bgmVolume = saveData->GetBGMVolume();

//音量を適応
UGameplayStatics::SetSoundMixClassOverride(
    GetWorld(),          // 対象のWorld
    SoundMix,            // 変更を適用するSoundMix
    BGM_SoundClass,      // 音量を変更する対象のSoundClass
    bgmVolume,           // Volume倍率(0.0 = 無音、1.0 = 通常音量)
    1.0f,                // Pitch倍率(1.0 = 通常の高さ)
    0.0f,                // 設定値へ変化するまでの時間(秒)
    true                 // SoundMixに未登録のSoundClassでもOverrideを追加するか
);

ネットで調べると、C++で設定画面の音量調整を作ってる方って少なかったのでまとめました。

自分用に最小でまとめましたので皆さんのお役に立てれば嬉しいです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?