ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

再生が終わるまで待つ

BGMが付いていないことに気がついたのでBGMを付けてみた。
BGM自体はフリー素材で探し始めたけど、イメージにあうのを探すのが大変だったので、Sunoで作ってみた。イメージする単語を入れていくつか作成してみたら、イメージに合うものができたので採用。
実際にBGMを付けてみたら、今度はメニュー選択時のSEが無いことが気になってしまった。
ということで、SEを付けてみた。ところがSE再生と同時に画面遷移してしまうのと、リスタート時は鳴り終わる前にシーンのリロードが入ってしまうので音が途中で切れてしまう。
SEが鳴り終わるまで待つという処理を実装。
最初はカウンタとかで一定時間待たないといけないかなと考えていたが、ChatGPTに聞いてみて、await命令が使えると知った。さらにawait命令の条件にサウンド再生の終わりを指定することができた。実際のコードは次の通り。

$AudioStreamPlayer.play()
await $AudioStreamPlayer.finished

ちなみに一定時間、たとえば3秒待つというのはタイマーを使って次のように書ける

await get_tree().create_timer(3.0).timeout

こういったゲームでは定番の処理が簡単に書けるのがGodotの良さ。まあ、ゲームエンジンなので当然ではあるけど。