【GDevelop】オブジェクト間の距離で音量を変化させる方法

プレイヤーのキャラクターと音源との距離に合わせて、音量を変化させる方法を紹介します。

音のコントロールはページでは伝わりにくいので、まずは完成したサンプルの動画をご覧ください。
この動画では、ウサギとハチの距離に応じて、羽音の音量が変化します。

動画で使用したサンプルのシーンは、こんな感じ。
音を聞くウサギと、羽音の音源となるハチなどを配置しています。

使用素材:https://pixelfrog-assets.itch.io/

ウサギには「ドラッグ可能」ビヘイビアを追加して、ドラッグできるようにしています。
また、ウサギとハチは使用した素材が小さかったので 2 倍に拡大しています。
(プロパティのカスタムサイズで大きくしています)
シーンにはその他に、デバッグ用のテキストオブジェクトも配置しています。

イベントは次の画像のようになっています。

では、一行ずつ順に説明していきます。

まず最初の行で、シーン開始時にチャンネル 1 でサウンド(羽音)をループ再生しています。
その再生アクションのパラメーターは、次の画像のとおりです。

今回のように再生するサウンドを細かく制御したい時は、チャンネルを指定できる「チャンネルでサウンドを再生する」または「チャンネルで音楽ファイルを再生する」を使用する必要があります。

チャンネル識別子を指定することで、後々そのサウンドをアクションで制御できるようになります。
(ここでいうチャンネルとは単なる識別用の番号であり、好きな数字を入れることができます)

そして 2 行目のイベントで、ウサギとハチの距離に応じて、チャンネル 1 の音量を変化させています。
そのアクションのパラメーターは、次の画像のとおりです。

チャンネル識別子には、シーン開始時のアクションで指定した値の 1 を指定します。
その上で、ウサギとハチの距離に応じて 0~100 の数値を代入しています。

このアクションのポイントは、値パラメーターに入力されている何やら小難しい式です。

clamp(100 - (Bunny.Distance(Bee) * 0.3), 0, 100)

↑と、書かれています。
(説明のため色分けしました)

では、まず clamp() 関数についてです。

この関数は、ある数値を指定した範囲内に制限することができます。
次のように使います。

clamp( [制限したい数値] , [最小値] , [最大値] )

音量は 0~100 の値である必要があるため、clamp() 関数で 0 ~100 に制限しています。
ピンクの 0 が最小値緑の 100 が最大値

そして制限したい数値には、次のような式が入力されています。

100 - (Bunny.Distance(Bee) * 0.3)

この式は次のような構造になっています。

最大値 - (ウサギとハチの距離 * 減衰率)

ウサギとハチの距離は Distance() オブジェクト関数で得ることができます。
つまり「Bunny.Distance(Bee)」と記述されている箇所には、ウサギ(Bunny)とハチ(Bee)の距離が入ります。

その距離に減衰率をかけています。
この数値が小さいほど遠くまで音が聞こえるようになります。
このサンプルでは 0.3 としてみましたが、ゲームや音源に合わせて、ここの数値は調整しましょう。

そして最後に、上記で算出された数値を音量の最大値 100 から引きます。
そうすることで、距離が離れるほど(Distance の数値が上がるほど)得られる数値は下がることになります。

例えば距離が 70 なら……
100 - (70 *0.3) = 100 - (21) = 79

距離が 30 なら……
100 - (30 *0.3) = 100 - (9) = 91

距離が 380 なら……
100 - (380 *0.3) = 100 - (114) = -14

この計算で得られた数値が、先に説明した clamp() 関数で制限された後、チャンネル 1 の音量として代入される、という仕組みです。

以上が、オブジェクト間の距離で音量を変化させる方法です。

サンプルのイベントでは、さらに「Debug」コメントなどが続きますが、これらは動作確認のために、距離と音量をテキストオブジェクトに出力しているだけなので、ここでは詳細な説明は割愛しますが、パラメーターはこんな感じになっています。

おしまい😆

コメント

このブログの人気の投稿

ブラウザ上で動く GDevelop オンライン版を試してみた感想

GDevelop の「イベント」を正しく理解しよう