※この連載の全ての記事は、タグ「ビッグカツ」の検索一覧から探すことができます。
※この連載で作ったゲームは「BigBreakOut(ゲームの作り方の記事付き) | フリーゲーム投稿サイト GodotPlayer」でプレイできます。
昔から人気の駄菓子「ビッグカツ」のフリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。
「ビッグカツブロック崩し」作成の第28回では、ゲームの BGM や効果音などの音量を調節するためのスライダー UI をタイトルシーンに配置して、その値が変わったときに音量を変更する関数の実装例と、そのテスト結果を紹介します。
![](https://compota-soft.work/wp1/wp-content/uploads/2024/09/GodotEngine4.3-公式サイトの一部-20240911.png)
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
前回の記事
前回は、ボールが衝突したパドルの位置によって Curve リソースで定義した反射角度を得て、当たる位置によってボールの反射角度を変えました。
ゲーム開始の入力判定の変更
音量スライダーをクリックすると、誤判定によって、ゲームが開始してしまう問題が発生したので、シーン全体ではなくスタートボタンをクリックした際に条件を変えました。
![Godot4 ビッグカツブロック崩し タイトルシーンにスタートボタンを配置](https://compota-soft.work/wp1/wp-content/uploads/2025/01/Godot4-ビッグカツブロック崩し-タイトルシーンにスタートボタンを配置-1024x603.png)
従来通り 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 ビッグカツブロック崩し 音量調節スライダーの配置](https://compota-soft.work/wp1/wp-content/uploads/2025/01/Godot4-ビッグカツブロック崩し-音量調節スライダーの配置.png)
HSlider クラスを選択して「作成」ボタンを押します。
![Godot4 ビッグカツブロック崩し 音量調節スライダーの配置1](https://compota-soft.work/wp1/wp-content/uploads/2025/01/Godot4-ビッグカツブロック崩し-音量調節スライダーの配置1.png)
シーンドックで名前を HSliderSoundVolume に変更して、そのノードを選択してインスペクタードックで設定を編集します。
音量の範囲を Min Value, Max Value で 0, 1 を設定して 0 ~ 1 の範囲にします。
これは、あとで音量を調整する関数に渡す引数の範囲と一致させるためです。
また、刻みは Step 項目を 0.1 にして十段階の音量を選択できるようにしました。
初期値は Value 項目で 0.5 を設定しました。
![Godot4 ビッグカツブロック崩し 音量調節スライダーの配置2](https://compota-soft.work/wp1/wp-content/uploads/2025/01/Godot4-ビッグカツブロック崩し-音量調節スライダーの配置2.png)
次に、スライダーの値が変更された際のシグナル value_changed(value: float) シグナルの受信側メソッドを TitleScene ルートノードを選択して title_scene.gd スクリプトに追加します。
![Godot4 ビッグカツブロック崩し 音量調節スライダーの配置3](https://compota-soft.work/wp1/wp-content/uploads/2025/01/Godot4-ビッグカツブロック崩し-音量調節スライダーの配置3.png)
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!
- Godot Engine – Free and open source 2D and 3D game engine
- Xユーザーのビッグカツといか姿フライのすぐる【公式】さん: 「使いどころは思いつきませんが、フリー素材としてどうぞご自由にお使いくださいませ! https://t.co/8F9q3hS02b」 / X
- しょかきうたげ【フリーフォント版あり】 – ぼんのう堂 – BOOTH
- HSlider — Godot Engine (4.x)の日本語のドキュメント
- Control — Godot Engine (4.x)の日本語のドキュメント #has_focus
記事一覧 → Compota-Soft-Press
コメント