2020/11/18(水) [n年前の日記]
#3 [godot] Godot Engineでサウンドを追加
Godot Engine 3.2.3 x64 を使って3D表示の簡単なシューティングゲームっぽいものを作る。
今回はサウンドを追加してみる。
利用するサウンドファイルは以下。自作しました。CC0 / Public Domain ってことで。
_simpleshootemup_sounds.zip
解凍すると以下のファイルが入っている。
今回はサウンドを追加してみる。
利用するサウンドファイルは以下。自作しました。CC0 / Public Domain ってことで。
_simpleshootemup_sounds.zip
解凍すると以下のファイルが入っている。
- bgm.ogg ... BGMファイル
- enemy_damage_se.wav ... 敵がダメージを受けた時のSE
- enemy_shot_se.wav ... 敵が弾を撃った時のSE
- player_damage_se.wav ... プレイヤーがダメージを受けた時のSE
◎ プロジェクトフォルダにインポート。 :
.wav や .ogg をGodot Engineのプロジェクトフォルダ\imports\ にコピー。自動でインポートされる。
インポート設定を確認。bgm.ogg を選択して、インポートタブをクリック。BGMはループ再生してほしいので、Loop にチェックが入ってることを確認する。もしチェックが入ってなかったらチェックを入れて「再インポート」をクリック。
SEとして使う各wavについても確認。1回鳴らしたら再生終了してほしいので、Loopにチェックが入ってないことを確認する。
インポート設定を確認。bgm.ogg を選択して、インポートタブをクリック。BGMはループ再生してほしいので、Loop にチェックが入ってることを確認する。もしチェックが入ってなかったらチェックを入れて「再インポート」をクリック。
SEとして使う各wavについても確認。1回鳴らしたら再生終了してほしいので、Loopにチェックが入ってないことを確認する。
◎ BGMを追加。 :
BGMを追加する。Mainシーンを開いて、AudioStreamPlayerノードを追加する。
Bgm にリネーム。
Bgm を選択して、Stream に bgm.ogg を設定する。
スクリプトに、BGM再生開始を記述。res://scripts/Main.gd を開いて、初期化処理 _ready() の中に、$Bgm.play() を追記する。
ついでに一応、ゲームオーバー (die_player()) とステージクリア (die_enemy()) の中で、$Bgm.stop() を呼んでBGMを停止しておく。すぐにシーンが切り替わってBGMが消えるのでこの処理はしなくてもいいのかもしれないけれど、一応念のため。
Bgm にリネーム。
Bgm を選択して、Stream に bgm.ogg を設定する。
- ファイル一覧ウインドウから bgm.ogg をドラッグアンドドロップ。
- あるいは、Stream の横の「空」をクリックして「読込み」→ bgm.ogg を選択。
スクリプトに、BGM再生開始を記述。res://scripts/Main.gd を開いて、初期化処理 _ready() の中に、$Bgm.play() を追記する。
ついでに一応、ゲームオーバー (die_player()) とステージクリア (die_enemy()) の中で、$Bgm.stop() を呼んでBGMを停止しておく。すぐにシーンが切り替わってBGMが消えるのでこの処理はしなくてもいいのかもしれないけれど、一応念のため。
◎ プレイヤーのダメージSEを追加。 :
プレイヤーがダメージを受けた時にダメージSEを鳴らしたい。
プレイヤーのシーン、res://assets/Player.tscn を開いて、AudioStreamPlayerノードを追加。DamageSe にリネーム。
DamageSe を選択して、Stream に player_damage_se.wav を指定。
スクリプト、Player.gd を修正。SEの再生開始を指定する。ダメージ処理の開始部分に ―― emit_siginal("player_damaged") を呼んでる行の前後のあたりに、$DamageSe.play() を追記する。
これで、プレイヤーがダメージを受けたタイミングでダメージSEが鳴るようになった。
プレイヤーのシーン、res://assets/Player.tscn を開いて、AudioStreamPlayerノードを追加。DamageSe にリネーム。
DamageSe を選択して、Stream に player_damage_se.wav を指定。
スクリプト、Player.gd を修正。SEの再生開始を指定する。ダメージ処理の開始部分に ―― emit_siginal("player_damaged") を呼んでる行の前後のあたりに、$DamageSe.play() を追記する。
これで、プレイヤーがダメージを受けたタイミングでダメージSEが鳴るようになった。
◎ 敵のSEを追加。 :
敵にもSEを追加していく。ダメージを受けた時にダメージSEを鳴らして、弾を撃った時に発射SEを鳴らしたい。
EnemyZako.tscn を開いて、AudioStreamPlayerノードを2つ追加。DamageSe と ShotSe にリネーム。
Streamプロパティに wav ファイルを指定。
スクリプト内で各SEの再生を指定する。EnemyZako.gd を編集。
ダメージを受けるタイミングで ―― emit_siginal("enemy_damaged")を呼んでる行の前後で、$DamageSe.play() を呼ぶ。
弾を撃つタイミングで ―― _on_ShotTimer_timeout() の中で、$ShotSe.play() を呼ぶ。
これで、敵がダメージを受けた時と弾を撃った時にSEが鳴るようになった。
EnemyZako.tscn を開いて、AudioStreamPlayerノードを2つ追加。DamageSe と ShotSe にリネーム。
Streamプロパティに wav ファイルを指定。
- DamageSe の Stream に enemy_damage_se.wav を指定。
- ShotSe の Stream に enemy_shot_se.wav を指定。
スクリプト内で各SEの再生を指定する。EnemyZako.gd を編集。
ダメージを受けるタイミングで ―― emit_siginal("enemy_damaged")を呼んでる行の前後で、$DamageSe.play() を呼ぶ。
弾を撃つタイミングで ―― _on_ShotTimer_timeout() の中で、$ShotSe.play() を呼ぶ。
これで、敵がダメージを受けた時と弾を撃った時にSEが鳴るようになった。
◎ 動作確認。 :
動作確認をしてみる。Mainシーンを開いてF6キーを押す。
ちゃんと音が鳴ってくれた。
次回はプロジェクトをエクスポートして、Windows上で動くexeファイルや、Webブラウザ上で動くHTML5版を出力してみる。
ちゃんと音が鳴ってくれた。
次回はプロジェクトをエクスポートして、Windows上で動くexeファイルや、Webブラウザ上で動くHTML5版を出力してみる。
[ ツッコむ ]
以上です。