2020年5月15日金曜日

サウンドのフェードイン・アウト

結構前の投稿で、いずれBGMのフェードについて記そう、と書いたままで
放置してた気がします。

今、自作ゲームでBGM調整してて思い出しました…
サウンドをアクションでフェードイン・アウトさせる方法について説明します。

まずエコシステム
[ Audio Fade In ] [ Audio Fade Out ]
の2つのアクションを入手します。
 アクションブラウザカテゴリ[ AUDIO ]にアクションが格納されます。

このアクション、今も修正されていなければ、フェードイン、フェードアウトが逆なのです。
そこも踏まえて実際にノードを組んでみます。

サウンド素材を用意した状態で、適当に空オブジェクト[ emp test BGM ] を作り
状態遷移を設定します。

こんなノードを作ってみました。
グローバルイベント「BGM開始」 を受信するとBGMを演奏。
「BGM終了」 を受信で演奏を止めます。


インスペクタには[ Audio Souce ]コンポーネントを付けます。
( AUDIO関連のアクションを使うと1クリックで自動付与)
線の部分に、用意したサウンド素材をドロップ。

----------------------------------------

フェードイン_演奏の方を見てみます。
はじめのステートにこのようにアクションを並べます。演奏ボリュームを"0"に。
Next Frame Event は演奏終了を待たずに、次のステートに移動するためです。


次のステートがフェードイン処理。アクションは [ Audio Fade Out ]逆なんですね。
1秒でボリュームを1(最大)にするということです。

----------------------------------------
フェードアウト_演奏停止の方です。アクションは [ Audio Fade In ]
BGMが演奏されている状態から、1秒で音量を0にします。

次のステートで[ Audio Stop ] 演奏停止です。


もちろん、これらのアクションを使わない方法もあります。VolumeをFloat変数にして
値をアニメーションさせるなど。このアクションが一番簡単だとは思いますが。

素材を使い分ける場合などは、[ Set Audio Clip ] や [Set Audio Loop] などで、
使用する素材やループ再生の有無を調整することになります。

参考、ブログ内記事 [PM] BGMをループ再生し続ける