試しに、音を消してゲームをプレイしてみましょう。臨場感や没入感が減り、キャラクターやUIを動かしてもどこか手応えのない印象を受けるはずです。
BGM、効果音、環境音、ジングルなどのサウンドは、プレイヤーをゲームの世界に引き込むための重要な要素です。今回はサウンドファイルパック『GDC Game Audio Bundles』を使って、Unreal Engine 5(以下、UE5)での基本的なサウンドの実装を解説します。
試しに、音を消してゲームをプレイしてみましょう。臨場感や没入感が減り、キャラクターやUIを動かしてもどこか手応えのない印象を受けるはずです。
BGM、効果音、環境音、ジングルなどのサウンドは、プレイヤーをゲームの世界に引き込むための重要な要素です。今回はサウンドファイルパック『GDC Game Audio Bundles』を使って、Unreal Engine 5(以下、UE5)での基本的なサウンドの実装を解説します。
TEXT / wvigler
EDIT / 神山 大輝
UE5で作ったゲームにサウンドを実装する場合、デフォルトで備わっているサウンド機能を使う方法と、WwiseやADX2、FMODといったサウンドミドルウェアを使用する方法の2通りがあります。
ミドルウェアを用いることで高度なサウンド演出が可能になりますが、UE5はデフォルト機能だけでも十分なサウンドの実装を行うことが可能です。今回はサウンドデータセット『GDC Game Audio Bundles』を活用して、初めてサウンド実装を行う方向けに基本機能の使い方を解説します。
『GDC Game Audio Bundles』は毎年のGame Developer Conference(GDC)開催を記念してサウンドライブラリ販売サイトSonnissから無料配布されているサウンドデータパックです。2020年のものだけでもファイル数1,400を超え、容量は55GB以上、全ての年のものをダウンロードすると数百GBほどのデータになります。ライセンス情報はこちらをご覧ください。
今回は音声データをプロジェクトにインポートして使うため、最初にプロジェクトが必要です。Epic Games launcherからエンジンを立ち上げて「ファーストパーソン」のテンプレートプロジェクトを作成しましょう。
「ファーストパーソン」のテンプレートでは一人称視点のキャラクターを操作できます。また、銃に近付いて取得すると、ボールを発射できるようになります。
プロジェクトを作り終えたらアセットを追加しましょう。サウンドと合わせるビジュアルエフェクトとして、永続無料コンテンツ『FX Variety Pack』を追加します。
Epic Games launcherからダウンロードページへ行き、購入手続きを済ませた上で「プロジェクトに追加」を選択し、先ほど作ったプロジェクトに追加します。
追加後にプロジェクトに戻り、コンテンツドロワーを確認します。「コンテンツ」の下に「FX Variety Pack」のフォルダが追加されていればアセット導入は成功です。
続いて音声ファイルですが、『GDC Game Audio Bundles』は容量が大きいため、使用する2020年のPart1、3、4、5のみダウンロードします。
ダウンロードしたものから今回使用するのは、以下のデータです。
※自分の好きな効果音など任意のデータで試しても問題ありませんが、説明の都合上ファイルを指定しています
「コンテンツ」フォルダの下に「SonnissSounds」という名前のフォルダを作ります。作成したフォルダに音声ファイルをドラッグ&ドロップすると、Sound Wave(またはオーディオファイル)アセットとしてインポートすることができます。
インポートされたSound Wave(またはオーディオファイル)アセットは音楽や効果音などの「音」を直接保存しているアセットです。
今回使用するデータは複数のパックを複合しているため、音量がバラバラです。音量はSound Waveをダブルクリックで開いてサウンド→Volumeのパラメーターで調整できるので、丁度よい音量に調整しましょう。
参考として、この記事で使用している各音声のVolumeパラメーターの数値を載せておきます。
アセット名 | Volume数値 |
057_Designed_Loop_Experimental_Tension_120_bpm-05-01_With_Bass | 0.4 |
Don_t_Give_Up | 1.6 |
Harsh_Noise_Feedback_Loop-038 | 0.8 |
Magic_Explosion_Short19 | 0.35 |
Magic_Spells_CastShort_Electricity_General08 | 0.3 |
Magic_Spells_Impact_Water_Low23 | 0.3 |
MeleeSwingsPack_96khz_Stereo_HighSwings15 | 0.2 |
MeleeSwingsPack_96khz_Stereo_LowSwings31 | 0.2 |
MeleeSwingsPack_96khz_Stereo_NormalSwings39 | 0.15 |
これでサウンドの準備は完了です。
今回は多くのアセットのパラメーターを変更しています。こういう時は、こまめにプロジェクトの保存を行っておきましょう!
まずは最も簡単な方法で、ゲーム中にサウンドを鳴らしてみましょう。
一番左にある「057_Designed_Loop_Experimental_Tension_120_bpm-05-01_With_Bass」をドラッグ&ドロップしてマップに配置します。これだけでゲーム開始時に音を鳴らすことができます。プレイを開始して、実際に確認してみましょう。
「コンテンツ\StarterContent\Audio」内の「Starter_Music01」はスターターコンテンツのBGMサンプルです。「057_Designed_Loop_Experimental_Tension_120_bpm-05-01_With_Bass」を削除して、代わりにこれを配置してみましょう。プレイ中にループBGMを流すことができます。
上記の方法はキャラクターの動作などと連携が難しく、効果音には向きません。一方で、BGMや環境音を鳴らす場合はこれで充分な場合も多く、ビューポートに表示されるため見た目にも分かりやすいです。
効果音を「特定のタイミングで鳴らしたい」という場合には、ブループリントを使う方法がおすすめです。
まずは、テンプレートにおけるボール射出時の効果音がどういった処理で鳴るのかを確認してみましょう。「コンテンツ\FirstPerson\Blueprints」の「BP_Weapon_Component」をダブルクリックし、イベントグラフを開きます。
イベントグラフにはブループリントでさまざまな仕組みが実装されていますが、その中でも「Play Sound at Location」というノードに注目しましょう。
この「Play Sound at Location」が音を鳴らすノードです。Soundピンに、ボール発射時の音である「FirstPersonTemplateWeaponFire02」が設定されています。
続いて、Play Sound at Locationの使い方を覚えるために、このノードを使ってジャンプ時に音を鳴らす処理を実装しましょう。
まずはプレイヤーキャラクターのブループリントを開きます。「コンテンツ\FirstPerson\Blueprints」にある「BP_FirstPersonCharacter」をダブルクリックしましょう。
イベントグラフ上で右クリックし、ノード一覧から「イベント On Jumped」を探して配置します。このイベントはキャラクターのジャンプ時に実行されます。
「On Jumped」イベントに直接Play Sound at Locationのノードをつなげます。これで「いつ音を鳴らすのか」を指定できました。更にPlay Sound at Locationノードには「どの音を鳴らすのか」と「どこで音を鳴らすのか」を指定する必要があります。それぞれ以下の画像のように指定しましょう。
これでジャンプ時に音が鳴るようになりました。プレイして確認してみましょう。
V字型のマークをクリックしてノードを展開することで、音量やピッチ(音の高さ)、再生位置などが調整できます。
続いて、サウンドキュー機能を使って、素材としての音を加工していきます。
サウンドキューは、UE5上で音の編集をするための機能です。機能は限定されているものの、音量やピッチの調整、他の音との組み合わせなど、簡単な操作でさまざまな加工をすることができます。
UE5では音を編集、加工する機能としてより高度なものもありますが、まずは簡単に編集できるサウンドキューを覚えるといいでしょう
ジャンプ音や足音など、頻繁に再生する効果音の場合、全く同一の音を流し続けるとプレイヤーに退屈な印象や違和感を与えてしまいます。サウンドキューの機能を使えば、ピッチや音量、タイミングを少し変えたり、違う効果音を組み合わせたりすることができます。
先ほどジャンプ音として使った「MeleeSwingsPack_96khz_Stereo_HighSwings15」からサウンドキューを作成します。
アセットを右クリックして出てくるメニューから「キューを作成」をクリックすると、新しいサウンドキューが作られます。名前を「CUE_Jump」としておきましょう。
ダブルクリックして開くと、ブループリントのイベントグラフに似た下図のような画面が表示されます。
処理の記述はブループリントと同様にノード同士をつなげて行います。サウンドキュー作成時点では「Wave Player」と「アウトプット」ノードが接続されています。「アウトプット」は左から流れてきた音声情報を最終的に音として出力するノードです。
ここにピッチや音量を変更するノードを追加しましょう。ノードの扱い方はブループリントとほぼ同じです。右クリックメニューから「Modulator」ノードを追加して下図のようにつなげます。
「キューを再生」をクリックしてテストすると、ピッチと音量が一定範囲内で変化したサウンドが再生されます。かなり小さな変化ですが、全く同じサウンドが連続で再生されることの違和感を低減するための処理となりますので、そこまで極端な変化幅を付ける必要はありません。
以上で音のピッチや音量を変化させることができました。さらにジャンプ音のバリエーションを増やすため、次は2つ以上の音をランダムで選択するようにしましょう。
まずは新しいWave Playerノードを追加します。追加したノードを選択し、「Sound Wave」で再生するSound Waveアセットを「MeleeSwingsPack_96khz_Stereo_LowSwings31」に設定しましょう。設定するとノード名の「なし」の部分が「MeleeSwingsPack_96khz_Stereo_LowSwings31」に変化します。
さらに同じようにして「MeleeSwingsPack_96khz_Stereo_NormalSwings39」のWave Playerノードも作成しましょう。
3つのWave Playerの音のうちどれかをランダムで流してほしいので、「Random」というノードに3つのWave Playerをつなげます。RandomのアウトプットにはModulatorを接続します。
「キューを再生」ボタンを押すと実際に出力される音が再生されます。視覚的にもランダムに再生されていることがよく分かります。
サウンドキューができたので、「BP_FirstPersonCharacter」に戻り「CUE_Jump」をジャンプ音として設定しましょう。On Jumpedに接続された、Play Sound at LocationのSoundピンを「CUE_Jump」に変更します。
これで、ジャンプ時のサウンドが作成したサウンドキューになりました。RandomやModulatorにより、ジャンプ音の退屈さをかなり軽減できます。
この他にも音同士をクロスフェードさせたり、音を流すタイミングを遅らせたりなど、さまざまな機能を持ったノードがサウンドキューには存在します。これらの詳細については公式ドキュメントをご確認ください。
他のサウンド機能との兼ね合いもあるため、Play Sound at Locationなどで音として指定する場合にはSound Waveではなく、そこから作成したサウンドキューで指定することをおすすめします
以上がUE5のサウンドに関する基本的な部分の説明になります。
続いてはサウンドとビジュアルエフェクトを組み合わせることで視覚的にも聴覚的にもインパクトのある、さらに「ゲーム的なエフェクト」を作成します。
ゲームでの効果音の使われ方の1つとして、アクション時にパーティクルなどの視覚エフェクトと組み合わせる方法が挙げられます。VFXアセット「FX Variety Pack」にサウンドを組み合わせて、音や見た目を総合した「演出」を作ってみましょう。
FX Variety Packは魔法のようなエフェクトが多く用意されています。今回はその中から「P_ky_explosion」というパーティクルを使って「弾が何かにヒットしたら爆発する」エフェクトと爆発音を組み合わせます。
まずは「弾がヒットしたら爆発する」演出を実装します。射出される弾のブループリントは「コンテンツ\FirstPerson\Blueprints」にある「BP_FirstPersonProjectile」です。中身を開きましょう。
イベントグラフの「イベント Hit」に続くノードが、ヒット時の挙動が書かれている部分です。
一連のヒット処理の中に「Spawn Emitter at Location」ノードを追加し、指定したパーティクルがスポーンされるようにします。下図の通りに実装を編集しましょう。
これで弾のヒット時に爆発エフェクトがスポーンします。
見た目ができたら、続いて効果音の処理を実装します。といってもジャンプ音を付けた時とやることは大きく変わりません。まずは爆発音である「Magic_Explosion_Short19」のキューを作成します。
Spawn Emitter at Locationの直後にPlay Sound at Locationを追加して、「Magic_Explosion_Short19_Cue」を鳴らすように設定します。
これでパーティクルの発生と同時にサウンドが鳴るようになります。プレイして確かめましょう。
やり方が掴めたら、豊富にあるパーティクルや効果音を使って更にクールな演出を作ってみましょう!
実は、「Play Sound ~」で始まるノードは2つ存在します。1つはここまで使ってきた「Play Sound at Location」。もう1つは「Play Sound 2D」というノードです。
ここまでで紹介した機能を使う上では、2つのノードに差異はありません。この2つを分け隔てるのは『3Dオーディオ』に対応しているかどうかです。
3D空間上では、同じ音でも場所によって聞こえ方が異なります。同じ音だったとしても、遠くで鳴っているのか、耳元で鳴っているのかによって音量に大きな差があります。また、ある音が右から聞こえたのか、左から聞こえたのかを判別できるのは、左右の耳で聞こえ方が異なるからです。
このように、距離による音の減衰や、左右どちらから音が鳴るかを決めるパンニングなどによって擬似的に現実世界の音環境を再現することで臨場感を高めることができます。
3Dオーディオは一人称視点などの没入感や緊迫感が重要なゲームにとって特に有用です。一方で、どこにいても同じように聞こえる2Dのサウンドは、UIなどの効果音で求められます。この2つを区別するため、「Play Sound ~」関数は3Dオーディオに対応した「~ at Location」と2Dのサウンドのみに対応した「~ 2D」に分けられています。
本記事では今のところ3Dオーディオ機能を一切使っていないため、今の状態では2つのノードに違いはありません。「Play Sound at Location」を3Dオーディオで扱うためには、Sound Attenuation(サウンド減衰)というアセットの作成が必要です。
Sound Attenuation(サウンド減衰)は音の発生源から離れるに従って、音が小さくなる(減衰する)現象を再現する機能です。
機能の効果を実感するため、まずはサウンドを減衰させる前の状態を確認しておきましょう。「SonnissSounds」内の「Harsh_Noise_Feedback_Loop-038」のサウンドキュー「Harsh_Noise_Feedback_Loop-038_Cue」を作成し、マップ上にドラッグ&ドロップで配置します。
この効果音は本来ループさせて使うものですが、デフォルトでループ再生がオンになっていません。サウンドキューを開いてWave Playerノードを選択し、Loopingにチェックを入れましょう。
マップに設置したHarsh_Noise_Feedback_Loop-038_Cue自体はプレイ中には見えません。ここでは場所の目印として「コンテンツ\FXVarietyPack\Particles」の「P_ky_magicCircle1」を同じ位置に配置しておきましょう。
まだSound Attenuationは適用されていないので、プレイヤーが動いても全く音量が変化しません。音源に対して距離を縮めたり離したりしても、音量は変わっていません。本来であれば、距離が離れたら音量も小さくなって欲しいところです。
これを実現するために、Sound Attenuationを作成しましょう。コンテンツドロワー上で右クリックして「サウンド→サウンド減衰」をクリックし、Sound Attenuationアセットを作成します。
さっそく、作成したアセットを適用してみましょう。Harsh_Noise_Feedback_Loop-038_Cueを選択して詳細パネルのアテニュエーション→減衰設定の右にある「なし」をクリックし、ドロップダウンメニューからSA_AttenuationTestを選択します。
一旦ビューポートに戻ってみましょう。サウンドの周囲に2つの球状のウィジェットが新たに出現しています。
この2つの球は音が減衰を始める範囲と、減衰しきって聞こえなくなる範囲を表しています。下の画像はこのマップを真上から見た場合の、聞こえる音量の変化の様子です。
試しにSA_AttenuationTestのアセットを開き、「減衰最短距離」や「フォールオフ距離」のパラメーターを変えてみましょう。これらは減衰の範囲を設定するためのもので、変更に合わせて内側と外側の球の大きさが変化します。
デフォルトの設定だと減衰の様子が分かりにくいので、極端な数値にして確認しやすくしましょう。ここでは、減衰最短距離を「400.0」に、フォールオフ距離を「1500.0」に設定します。
設定が終わったらプレイして様子を確認しましょう。
これでHarsh_Noise_Feedback_Loop-038_Cueを3Dオーディオで扱えるようになりました。Sound Attenuationの適用はこのやり方以外にもサウンドキューの設定やブループリントノードからも可能です。
3Dオーディオを活用すると、臨場感や没入感にあふれたゲームを作ることができます。ぜひ、あなたのゲームのクオリティアップに役立ててみてください!
UE5の3Dオーディオには、トンネルやコンサートホールなどで発生する残響音(リバーブ)を再現する機能なども存在しています。更にリアルな音響を求めたい際は、公式ドキュメントなどを参考にして残響音を実装してみるのも面白いかもしれません。
『GDC Game Audio Bundles』ダウンロードページ『FX Variety Pack』ダウンロードページアンリアルエンジンにハマり、ぷちコンでゲーム作ってた男。映像編で2連覇したことも。
昔はよくアーケードゲームとかやってました。
一番やり込んだのは「ケツイ ~絆地獄たち~」「戦国BASARAX」あたり。ローグライトゲームとかも好きです。
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
東京ゲームショウ2024で展示された作品のプレイレポートやインタビューをまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。