Godot4 ビッグカツブロック崩し27 音量調節のスライダーの配置

※この連載の全ての記事は、タグ「ビッグカツ」の検索一覧から探すことができます。
※この連載で作ったゲームは「BigBreakOut(ゲームの作り方の記事付き) | フリーゲーム投稿サイト GodotPlayer」でプレイできます。

昔から人気の駄菓子「ビッグカツ」フリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。

「ビッグカツブロック崩し」作成の第28回では、ゲームの BGM や効果音などの音量を調節するためのスライダー UIタイトルシーンに配置して、その値が変わったときに音量を変更する関数の実装例と、そのテスト結果を紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

前回の記事

前回は、ボールが衝突したパドルの位置によって Curve リソースで定義した反射角度を得て、当たる位置によってボールの反射角度を変えました

ゲーム開始の入力判定の変更

音量スライダーをクリックすると、誤判定によって、ゲームが開始してしまう問題が発生したので、シーン全体ではなくスタートボタンをクリックした際に条件を変えました

Godot4 ビッグカツブロック崩し タイトルシーンにスタートボタンを配置

従来通り Space / Enter キーが押されたときに進むように _process イベント関数の処理を変更しました。

# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta):
	# Enter / Space キーが押された直後の場合
	if Input.is_action_just_pressed("ui_accept"):
		# ボタンの効果音を再生します。
		SCUtil.AudioStreamOneShotPlay(SCUtilGlobal, audio_stream_button)
		# シーンを設定されたものに切り替えます。
		change_next_scene()
	return

新たに配置した Button クラス派生の ButtonStart ノードでは、ノードタブで button_up() シグナルを受け取る関数(受信側メソッド)を TitleScene ノードに割り当てている title_scene.gd スクリプトに追加して、ゲームを開始する同様の処理を定義しました。

## ButtonStart が離された際に呼び出される関数(受信側メソッド)です。
func _on_button_start_button_up():
	# ボタンの効果音を再生します。
	SCUtil.AudioStreamOneShotPlay(SCUtilGlobal, audio_stream_button)
	# シーンを設定されたものに切り替えます。
	change_next_scene()
	return

スライダー UI の配置

音量を調節する水平スライダー( HSlider )をタイトルのシーンに配置します。

title_scene のタブを選択してタイトルのシーンを開いて、シーンドックの TitleScene ルートノード右クリックして表示されるメニュー「子ノードを追加」を選択します。

Godot4 ビッグカツブロック崩し 音量調節スライダーの配置

HSlider クラスを選択して「作成」ボタンを押します。

Godot4 ビッグカツブロック崩し 音量調節スライダーの配置1

シーンドックで名前を HSliderSoundVolume に変更して、そのノードを選択してインスペクタードックで設定を編集します。
音量の範囲を Min Value, Max Value で 0, 1 を設定して 0 ~ 1 の範囲にします。
これは、あとで音量を調整する関数に渡す引数の範囲と一致させるためです。

また、刻みStep 項目を 0.1 にして十段階の音量を選択できるようにしました。
初期値Value 項目で 0.5 を設定しました。

Godot4 ビッグカツブロック崩し 音量調節スライダーの配置2

次に、スライダーの値が変更された際のシグナル value_changed(value: float) シグナルの受信側メソッドを TitleScene ルートノードを選択して title_scene.gd スクリプトに追加します。

Godot4 ビッグカツブロック崩し 音量調節スライダーの配置3

title_scene.gd スクリプトに追加した value_changed(value: float) シグナルの受信側メソッドの関数を以下のように定義します。
audio_bus_name と _bus は音量を調節するための AudioServer.set_bus_volume_db 関数で用います。

## オーディオバスの名前です。エディタ下パネルのオーディオで確認できます。
@export var audio_bus_name := "Master"

## 指定した名称 (Master) のバスの要素番号です。
@onready var _bus := AudioServer.get_bus_index(audio_bus_name)

## HSliderSoundVolume ノードの値が変更された際に呼び出される関数(受信側メソッド)です。
func _on_h_slider_sound_volume_value_changed(value):
	# スライダーで指定された値を音量として設定します。
	AudioServer.set_bus_volume_db(_bus, linear_to_db(value))
	# ユーザーが操作している場合(音量調節スライダーにフォーカスがある場合)
	# 起動時にセーブデータから値を設定する際にはならないようにフォーカスの有無を判定します。
	if $HSliderSoundVolume.has_focus():
		# 音量のテストとしてボタンの効果音を再生します。
		SCUtil.AudioStreamOneShotPlay(SCUtilGlobal, audio_stream_button)
	return

has_focus 関数は、あとで、セーブデータで音量を管理する際に、アプリ起動時にセーブデータから音量を設定するタイミングで、ユーザがスライダーに触れていないのにテスト用の効果音が鳴ることを防ぐためです。

関連記事

音量を調節するスライダーの実装例については、以下の記事も参照してください。

テスト

F6 キーを押して、開いているタイトルのシーンを実行します。

スライダーを動かすたびに、音量のテスト用の効果音が再生されます。
またスタートボタンを押した際の効果音だけではなく、ステージのシーンで再生される BGM にもその音量が適用されます。

まとめ

「ビッグカツブロック崩し」作成の第28回では、ゲームの BGM や効果音などの音量を調節するためのスライダー UIタイトルシーンに配置して、その値が変わったときに音量を変更する関数の実装例と、そのテスト結果を紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました