【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」コメントなどが続きますが、これらは動作確認のために、距離と音量をテキストオブジェクトに出力しているだけなので、ここでは詳細な説明は割愛しますが、パラメーターはこんな感じになっています。
おしまい😆
コメント
コメントを投稿