当サイトではPRを含む商品リンクを使用しております。

Unityでテンポが異なる通常BGMと戦闘BGMを即座に切り替える

MIDI

テンポ(速さ)のことなるBGMを通常時用と戦闘時用2つ用意して、同時に異なる音量で流しておいて戦闘中フラグが立ったかどうかでBGMを切り替えます。

今回は、戦闘中と通常時で音楽のテンポが異なりますが、

演出を挟むことなくリアルタイムで、曲の再生位置を保ったままBGMを切り替えていきます。

github

GitHub - KidaiRinboku/MusicChangeTest
Contribute to KidaiRinboku/MusicChangeTest development by creating an account on GitHub.

デモをプレイできるリンク(キーボードが必要です。ADor左右で移動、スペースでジャンプ)
赤い範囲に入ると戦闘に入ります。

動画イメージ(すみません、音ちっちゃいです、そしてこの後のサウンドクラウドは音でっかいです気をつけて)

通常時、戦闘用のBGMを作成する

今回は、短いですが下記2曲を作成しました。

作曲環境はmacOS版Logic Proで使用しているMIDIはMicroKey2Airです。

通常時BGMはテンポ120で作成。

戦闘時BGMも音色と少しコードの打ち方を変えただけのものをテンポ240で作成。

BGMをコントロールするスクリプトを作成

音楽制御用のスクリプトは下記を作成しております。

今回はMainCameraにアタッチしてみました。

テンポは通常時1:戦闘時2にのみ対応しているため、適宜値を変えるかパブリック化してください!

MusicChangeTest/Assets/Script/MusicController.cs at main · KidaiRinboku/MusicChangeTest
Contribute to KidaiRinboku/MusicChangeTest development by creating an account on GitHub.

ギミックとしては、音量と再生速度を調整しながら常に同時再生しています。

  • スタート時に通常BGMを音量1.0f速度1.0fで再生、同時に戦闘BGMを音量0.0で再生速度0.5fで再生
  • BattleBgmControl()を呼び出すと通常BGMを音量0.0f速度2.0fで再生、戦闘BGMを音量1.0fで再生速度1.0fで再生
  • NormalBgmControl()はスタート時と同じ条件で再生

という作りになっています。

BGMコントロール用スクリプトの処理を好きなところで呼ぶ

今回は、PlayerControllerから呼び出すことにしました。

MusicChangeTest/Assets/Script/PlayerController.cs at main · KidaiRinboku/MusicChangeTest
Contribute to KidaiRinboku/MusicChangeTest development by creating an account on GitHub.

敵の近くの空間に当たり判定が出た瞬間に、戦闘中フラグを切り替えています。

Update()で戦闘フラグtrueなら戦闘BGMを流すBattleBgmControl()を、

falseならNormalBgmControl()を流しています。

デモをプレイできるリンク(キーボードが必要です。ADor左右で移動、スペースでジャンプ)
赤い範囲に入ると戦闘に入ります。

コメント

タイトルとURLをコピーしました