2020/10/30(金) [n年前の日記]
#1 [godot] Godot Engineでサウンドを追加
Godot Enigne 3.2.3 x64 の勉強を兼ねて、Apple Catcher っぽいゲームを作成中。環境は Windows10 x64 2004。
一通りゲームっぽい感じになってきたので、今回はBGMやSEをつけてみる。ちなみに Godot Enigne ではサウンドファイルとして ogg や wav が利用できるらしい。
一通りゲームっぽい感じになってきたので、今回はBGMやSEをつけてみる。ちなみに Godot Enigne ではサウンドファイルとして ogg や wav が利用できるらしい。
◎ 利用するサウンドファイル。 :
利用するサウンドファイルは以下。自作してみた。CC0 / Public Domain ってことで。
_sound_files.zip
解凍すると以下のファイルが入ってるはず。
_sound_files.zip
解凍すると以下のファイルが入ってるはず。
- bgm.ogg ... BGMファイル
- damage.wav ... ダメージを受けた時のSE
- getitem.wav ... 林檎を取った時のSE
◎ サウンドファイルをインポート。 :
◎ インポート設定を確認。 :
各サウンドファイルをループ再生させるかどうかは、インポート時の設定項目で指定できる。
bgm.ogg のインポート設定を確認。bgm.ogg を選択して、インポートタブをクリック。「Loop」に有効になっていることを確認。この ogg ファイルはループ再生される。
damage.wav のインポート設定を確認。damage.wav を選択してインポートタブをクリック。「Loop」が無効になっているので、この wavファイルは再生すると1回だけ再生される。
getitem.wav のインポート設定を確認。「Loop」が無効になっているので、1回だけ再生される状態。
bgm.ogg のインポート設定を確認。bgm.ogg を選択して、インポートタブをクリック。「Loop」に有効になっていることを確認。この ogg ファイルはループ再生される。
damage.wav のインポート設定を確認。damage.wav を選択してインポートタブをクリック。「Loop」が無効になっているので、この wavファイルは再生すると1回だけ再生される。
getitem.wav のインポート設定を確認。「Loop」が無効になっているので、1回だけ再生される状態。
◎ サウンド再生用のノードを追加。 :
Godot Engine でサウンドファイルを再生したい時は AudioStreamPlayerノードを使うらしい。
Main.tscn を開いて、Mainノードの下に AudioStreamPlayerノードを追加する。Mainノードを選択して、ノード追加ボタンをクリック。
「Nodeを新規作成」ウインドウで「audio」と打ち込むとリストアップされるので、「AudioStreamPlayer」を選択して「作成」。
AudioStreamPlayerノードが追加された。
分かりやすくするために、ノード名を「Bgm」に変更。
Main.tscn を開いて、Mainノードの下に AudioStreamPlayerノードを追加する。Mainノードを選択して、ノード追加ボタンをクリック。
「Nodeを新規作成」ウインドウで「audio」と打ち込むとリストアップされるので、「AudioStreamPlayer」を選択して「作成」。
AudioStreamPlayerノードが追加された。
分かりやすくするために、ノード名を「Bgm」に変更。
◎ サウンドファイルを指定する。 :
AudioStreamPlayerノードに、鳴らすサウンドファイルを指定する。
Bgmノードを選択。Streamプロパティに bgm.ogg をドラッグアンドドロップ。
サウンドファイルが指定された。
Bgmノードを選択。Streamプロパティに bgm.ogg をドラッグアンドドロップ。
サウンドファイルが指定された。
◎ スクリプト内で再生と停止を指定。 :
メインシーンのスクリプト Main.gd 内で、BGMの再生、停止を指定する。
- メソッド new_game() 内に $Bgm.play() を追加。これでゲーム開始時にBGMが再生される。
- メソッド game_over() 内に $Bgm.stop() を追加。これでゲームオーバー時にBGM再生が停止される。
◎ プレイヤーシーンにもサウンドを追加。 :
プレイヤーシーンにもサウンドを追加する。Player.tscn を開く。Player.tscn を選択して右クリック。「シーンを開く」を選択。
Playerノードを選択してノード追加ボタンをクリック。
ダメージSEと林檎取得SEの2種類を鳴らしたいので、AudioStreamPlayerノードを2つ追加する。
分かりやすくするために、GetAppleSe、DamageSe にリネーム(名前変更)。
GetAppleSe と DamageSe の Stream に、damage.wav、getitem.wav をドラッグアンドドロップして割り当てる。
プレイヤーシーンのスクリプト Player.gd 内でSE再生を指定する。
メソッド _on_Player_body_entered(body) 内に以下を追加。
Playerノードを選択してノード追加ボタンをクリック。
ダメージSEと林檎取得SEの2種類を鳴らしたいので、AudioStreamPlayerノードを2つ追加する。
分かりやすくするために、GetAppleSe、DamageSe にリネーム(名前変更)。
GetAppleSe と DamageSe の Stream に、damage.wav、getitem.wav をドラッグアンドドロップして割り当てる。
プレイヤーシーンのスクリプト Player.gd 内でSE再生を指定する。
メソッド _on_Player_body_entered(body) 内に以下を追加。
- 林檎を取った時に、$GetAppleSe.play() を呼ぶ。
- 爆弾に当たった時に、$DamageSe.play() を呼ぶ。
◎ 音量を調整。 :
BGMの音量がちょっと大き過ぎる気がしてきたので、AudioStreamPlayer のプロパティで調整してみる。
メインシーンのBgmノードを選択して、「Volume Db」にマイナス値を指定。これで音量を下げることができる。ここでは -7 を指定してみた。
メインシーンのBgmノードを選択して、「Volume Db」にマイナス値を指定。これで音量を下げることができる。ここでは -7 を指定してみた。
◎ 動作確認。 :
メインシーンを開いてる状態でF6キーを押して動作確認。
音が鳴ってくれた。
次回は背景をどうにかしたい。灰色だけの背景は寂しい…。
音が鳴ってくれた。
次回は背景をどうにかしたい。灰色だけの背景は寂しい…。
[ ツッコむ ]
以上です。