unityゲームプログラミング 脳トレゲームを作る1 -BrainGame SE,BGMを入れる-
BrainGameという一定時間表示された色を覚えて、特定の色の玉を全てタップする脳トレゲーム。
ブログでの記事は初なので、むちゃくちゃ途中からだ。
BrainGameに音を入れる
音はないがBrainGameが最初想定していたプロトタイプ+αが出来たので一旦満足していた。
足りない部分はあるか、要素を付け加えるならどんなものがいいか考える。
音がないので、まず音を探して追加することにする。
- 音を追加する
⇨ゲーム中
⇨GameOver時
⇨GameClear時
⇨正解の玉をとった時
の4種類を探す。
simagameの時もこのサイトにお世話になった。
フリーBGM(音楽素材)無料ダウンロード|DOVA-SYNDROME
無事4種類の音を見つけてダウンロードをした。
Unityで音を入れるには空のManagerのGameObjectにAddComponentでAudioSourceを入れる。
ここにAudioClipの欄に音楽のmp3をドロップするとこのSceneが読み込まれたら勝手に再生する。
LoopボタンにチェックをつけるとLoopされる。とても簡単。
Play On Awakeをのチェックを外すと最初に勝手に流れなくなる。
Scene切り替えでフェードアウトさせたい。
- 疑問
Scene切り替えで音が唐突に終わるとなんか微妙なので、フェードアウトさせたい。どうする?
テラシュールブログさん
うーん。volumeを少しずつ変える方法になりそう。こういうなだらかに何かをさせようとすると自分で作るとしたらTime.deltaTimeを毎回使っている。
フェードアウトはGameStageでも使いたいし別スクリプトで管理出来たら楽なのかな。
ホワイトボードで考えよう。
まずは最初に決めた目標を達成してからにする
待て待て、一旦ホワイトボードに書き残しておいて、まずは全ての音楽を入れてしまおう。音を入れるのもまだ完璧とは言えないから繰り返してそっちを完璧にしよう。
どうせまた何か気づくことがあるだろう。
Title sceneはBGM,SE入れられた
とりあえずInvokeのおかげでStartボタンを押してからStageStartSEが流れ終わってからステージが始まるように出来た。
ボタンを押した時に音が流れるようにするには、これでいける。
AudioSource.PlayOneShot - Unity スクリプトリファレンス
次はGameScene
ゲーム中の音楽はさっきと同じようにGameManagerにAudioSourceを入れればいいが、Circleの正解音はPrefabに入れたほうがいいのかな。
Circleが消えたりするタイミングはCircleManagerが管理してるからCirclePrefabにて音を入れてみた。
がしかし、ならない。
みて見ると原因はPrefabがタップされた瞬間にDestroyされてしまうため、音が鳴りきる前にDestroyされているっぽい。
タップした時にDestroyはせずに元のカラーに戻すだけの処理に変える。
そうするとClear時の一個前の青が音が出なくなった。Clear時には全てDestoryしていたからだ。
Clear時だけ、GameSceneのGameManagerから出すことで解決させる。
解決した。
これで音を出すことが出来た。やっぱりSEとBGMを追加するだけでもグッとクオリティが上がる。
次はゲーム前の説明かな
フェードアウトはなんだかんだいらない気がしてきたので今度やろう。