UE5 + ADXを使った、ホラーゲームの「怖い」サウンド演出（効果音&ジャンプスケア）


# はじめに


ADXアンバサダーとして記事を書いておりますSigと申します。
この記事では、ホラー演出における欠かせない要素、「怖い音」を設計し、実装します。
怖い音ってなんだろう？という疑問からスタートし、具体的なシーンが完成するまでを順を追って見ていきます。

この記事では特定の機能ではなく、「UE5+ADXを使用してシーンを作る」ことを目標として書いています。
UE5やADXビギナー、触ったことがない方でも工程を把握できるような構成かつ初心者向けに書いていますので、作りたいシチュエーションをイメージしながら読んでいただくと頭に入りやすく、応用しやすいかもしれません。

この記事の動作サンプルはこんな感じです。
**ステレオ環境でサウンドを聞きながら視聴してください。最後に大きな音が再生されるので注意！**
何者かが歩き回り、最後に大きな音を立てて襲いかかる……古典的なホラー演出を、順を追って作っていきます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/eu1pNzXx-Cw?si=wvSPrq6xBY_F2B0j" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

動画内で流れている音の要素を分割してみましょう。

1. 怪異が歩く足音
2. 足音がどの方向から聞こえてくるか分かる「立体感」
3. 足音が再生されるごとに聞こえ方が変わる「ランダム性」
4. 最後にプレイヤーを驚かせる叫び声

これらを順番に実装していき、シンプルな音から臨場感ある音に磨いていきます。


当記事ではUE5.5を使用します。基本的にブループリントのみでの実装を想定しています。
ADX for UEはインディー向けの「LE版」であれば、無料で使用できます。
https://game.criware.jp/products/adx-le/

実装にはUE5.5 + ADX LEを使用します。導入や基本的な使い方は以下の記事にあります。
未導入の方もこの記事を読んで興味をお持ちになったら、ここを読んで導入してみてください。

**ADX for UEの導入で、一歩上のサウンド表現を（導入編）**

https://qiita.com/SigRem/items/4250925f6d66a4fd287a

**ADX for UEの導入で、一歩上のサウンド表現を（実践編）**

https://qiita.com/SigRem/items/c089b71c42e898980a46


では、ホラー演出について考えるところから始めていきましょう。

# 考察
「怖い音」ってなんだろう？

### 意表を突く音
プレイヤーの予想を裏切り、突然鳴り響く「予想外のサウンド」です。こういった視覚的・聴覚的な演出は「ジャンプスケア」（飛び上がらせるような怖い演出）とも呼ばれます。
後述の「意表を突かない音」と組み合わせることで、さらなるシナジーを生み出すこともできるでしょう。
- 突然目の前に現れる幽霊と叫び声
- 壁の向こうでいきなり鳴り響く血しぶきの音

### 意表を突かない音
淡々と鳴る音は、一見恐怖とは関係ないように思えますが、期待や恐怖を煽るようなサウンドは「意表を突く音」の効果を高めてくれます。
このサウンドを少しずつ変化させることで、恐怖が近づいていたり、変化が最大に達したときどうなるんだろう？という恐怖（期待）を増進します。
- なにかの気配を感じさせる足音
- 一定間隔で鳴り続ける雨漏りの音
- 段々早くなる金属音

# 実装
## シチュエーションを作ってみよう
実際に、サウンドからアプローチするホラー演出をひとつ作ってみましょう。
この記事では例として、このようなシーンを想定します。

![F02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/0281cd2f-9aa8-4eb2-9bca-31c15046879e.png)


1. 椅子が円状に置かれた部屋の中心に、プレイヤーが座っている
2. 何者か（怪異）が、その周りを静かに歩いている
3. 怪異がプレイヤーの正面まで周ってきた瞬間、大きな音をたてて襲いかかる

![F03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/79c87b5f-6ce0-4154-a024-44a835320cba.png)


この例においては、怪異の足音が「意表を突かない音」、襲いかかる音が「意表を突く音」となります。
淡々と連続する足音で恐怖に対する焦らし（期待感）を高め、クライマックスとなる叫び声がプレイヤーの恐怖を回収します。

## まずは音を鳴らしてみよう

まずはシンプルに、歩き回る怪異の足音を鳴らしてみましょう。
音声素材を用意したら、ADXのためのサウンドオーサリングツール「AtomCraft」で効果音を調整します。
（AtomCraftはADX LEにも同梱されています）
このツール上で、音声を「キュー」という形にまとめます。
![A01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/ea308f5a-2ad5-4251-96ce-b03491e5a7dc.png)
「キュー」を作ったらビルドし、UE5にインポートします。
![A02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/9602e1bb-3fa6-4bad-b86a-27c4496341ab.png)

キューシートアセットからレベル上にドラッグ&ドロップして、キューを配置します。
![A03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/d6b8e1bc-ff9d-47be-9333-2d8eeec754d7.png)

歩き回る怪異となるキャラクターのBPを開きます。

Atomコンポーネントを追加します。これが足音を再生する担当となります。
再生するキューに足音のキューを指定しておきます。
![A04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/161f6c01-b24c-4e1b-85fa-def6f075d147.png)

イベントグラフに移動し、足音を再生するカスタムイベント「PlayFootstep」を作ります。

![A05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/9983655e-c71e-4b25-ae12-53d6382b9ac4.png)


ゲーム開始時に、イベントを一定周期で発火するよう**Set Timer by Event**ノードを使って呼び出します。「Looping」にチェックを入れると、指定した秒数ごとにイベントが呼び出されます。
![A06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/903a6c03-2e28-4150-8963-12a2a5b4352e.png)

今回の記事では省略していますが、怪異の動きはシーケンサーを使って制御しています。
レベルシーケンス上にて、怪異のキャラクターアクターが移動するだけのシンプルなものです。
レベルシーケンスによってキャラクターが移動すると、追従している足音もその位置から再生されることになります。



<iframe width="560" height="315" src="https://www.youtube.com/embed/kd9xf0hVCmc?si=-D8nN-iS_w16fbku" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

……うーん、微妙……。ぜんぜん臨場感がありません。

考えられる原因としては、まず「音の定位感」がないことでしょう。
私達が音を聞く際には、音の聞こえ方や大きさ、方向によって音源の位置をイメージし、情報を得ています。

先ほどの映像では音が平面的で、聴覚からは音の位置を特定できないためリアリティがなく、情報のない音となってしまっているのです。
特にホラー演出では音が占める比重が大きく、サウンドに情報を詰めなければ緊張感も失われてしまいます。このゆるゆるサウンドを、順を追って改善していきましょう。

## 立体的な音にしてみよう
それでは足音に定位感を持たせ、誰かが歩いていることが分かるよう改善してみましょう。


AtomCraftでキューを選択し、インスペクターにて設定します。
「パンタイプ」を「3Dポジショニング」に変更します。これだけで、ある程度立体的なサウンドが実現します。
細かい角度などの設定も可能ですが、ひとまずこのままでいきましょう。
![B01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/f3a05307-7cc7-441b-90fa-8f221b5de4d5.png)

AtomCraft上でも「セッションウィンドウ」という機能を使用すると、この場で立体的なサウンドの位置を変えながら聞こえ方を確認することができます。
![B02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/994217f4-6ddd-488e-b496-d0655c42bca1.png)

再び「ビルド」し、UE5側で再インポートします。
![F01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/fb586a35-1a78-4577-9336-aa062a5262a4.png)


<iframe width="560" height="315" src="https://www.youtube.com/embed/AjynKqPGjt8?si=ACzIer8RQtWn10IU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

音の主が動き回っていることが聴覚だけで分かるようになりました。いい感じです！

しかし、聞き続けていると違和感を感じないでしょうか？
足音がひとつの音の繰り返しでしかないため、機械的に聞こえてしまっています。
このワンパターンな足音を改善してみましょう。

## 足音にランダム性を持たせよう
足音のサウンドがひとつではいまいち人間味（人間ではないかもしれませんが）に欠け、不自然に聞こえてきます。
また、人間は早い間隔で同じ音が繰り返されるのを聞くと違和感を感じる、という現象もあります（マシンガン効果と呼ばれるそうです）。
そこで、足音のバリエーションを何パターンか作り、それらがランダムで再生されるようにしてみましょう。

AtomCraft上でキューを選択し、インスペクターの「シーケンスタイプ」を「ランダム」に変更します。
これは、キューが再生されると、キュー内のトラックからランダムでひとつ再生される、という挙動です。
![C01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/7dc2e125-d3b0-4c5e-88e7-83469406a2b3.png)
足音用のサウンドを8種類ほど用意し、インポートしました。
![C02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/ad7befbd-b271-4a13-a4e4-00e9119c80e5.png)
ひとつずつ別々のトラックとしてキューに配置していきます。
再生ボタンを押すたびに、別の音が流れてくるかと思います。
![C03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/c917a9dd-a5b8-4b61-9b58-e1147bba9fcf.png)



<iframe width="560" height="315" src="https://www.youtube.com/embed/srCmywbhpGg?si=naDWb25YpBtpJrzi" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

足音に多彩なバリエーションが追加され、より自然な音になりました。
「何者かが周りを歩き続けている」という雰囲気も出て、一気に完成度が上がった感があります。



## ゴール&ジャンプスケアを作ってみよう
それではいよいよクライマックス、怪異が足を止めて襲いかかるサウンドを作ってみます。

AtomCraftでジャンプスケアの際の叫び声を「キュー」としてまとめます。
もちろんパンタイプを「3Dポジショニング」にして、立体的なサウンドにしておきます。
![D01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/2a9fe432-327c-431d-b11f-dadf47d7ba8b.png)
ビルドして、再度UE5にインポートします。
怪異のキャラクターBPを開き、イベントグラフに新たなカスタムイベントを追加します。
ジャンプスケアのキューを再生するためのイベントです。
**Get Actor Location**ノードを使い、怪異がいる座標から音が鳴るようにします。

キューを再生する**Play Sound at Location**には同名のノードがあることに注意してください。
もうひとつのノードはUE5デフォルトのサウンド再生用ノードとなります。ここでは必ず**Atomカテゴリのノードを使用**します。

![D02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/e5e6de18-5313-40db-99b8-3883dad82ce8.png)

怪異が歩き回るレベルシーケンスを選択したまま、レベルブループリントを開きます。
![D03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/88bd67d6-5f7b-4092-82c8-1f893002f684.png)
イベントグラフで、レベルシーケンスのリファレンスノードを配置します。
![D04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/5d213bcc-739f-4097-a9d4-052415f77b05.png)
リファレンスノードから、**Get Sequence Player**ノードを作ります。
![D05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/5324daf7-899b-438f-8ef5-65a90bd17b62.png)
**Get Sequence Player**から線を伸ばし、再生が終了したことを検知できる「Bind Event to On Finished」を選択します。
![D06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/5fdfca21-a054-4c55-ac68-ae03b425b151.png)
![D07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/9574bd5d-36c1-40b2-9113-fd7055a3c235.png)
発火されるカスタムイベントを作成します。
![D08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/3e2f17fa-c05c-4be6-892e-c33c8aa60f86.png)
ジャンプスケア用のレベルシーケンスと、怪異のキャラクターBPのジャンプスケアイベントを呼び出します。
![D09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/2c2159ec-8f33-40a9-83f3-ac3ea3302047.png)




<iframe width="560" height="315" src="https://www.youtube.com/embed/eu1pNzXx-Cw?si=wvSPrq6xBY_F2B0j" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

おー、ひとまずはジャンプスケアとなっているのではないでしょうか。
ここでひとまず演出は完成ですが、より完成度を高めるべくひと手間加えてみましょう。

## ランダムで発生するジャンプスケアをつくってみよう
さらなる恐怖を求めて、一周ではなく完全にランダムな周でジャンプスケアが起きるようにしてみます。

**MultiGate**を使うと、その処理が走った回数により処理を分岐できます。
この例では、最初の2回は怪異が歩き続け、3周目のゴールでジャンプスケアが発生することになります。
![E01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/81e3b49a-f578-476a-9b85-41670f7a132f.png)
こちらの例ではランダムなfloatにより処理を分岐させます。
「0.0～1.0」のランダムな数で「0.3」以下、つまり30%の確率でジャンプスケアが発生することになります。
ジャンプスケアが発生しなかった場合、怪異はまた周回を続けます。
![E02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154452/66243f4e-b854-4a5e-a466-1ced073770be.png)



どんな感じに動くか見てみましょう。

<iframe width="560" height="315" src="https://www.youtube.com/embed/-l8uoqBWf3w?si=M0WMD0AyWNNm9G6X" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

一周目では怪異は目の前を通り過ぎ……二周目で突然襲いかかってきます。


制作者自身も、いつクライマックスが来るかわからないため予想のつかないホラー感を楽しむことができるようになりました。
こういったランダム演出を取り入れると、同じゲームを2回目以降に遊ぶプレイヤーや、配信者のプレイを見守る視聴者にも新鮮な驚きを与えることができます。厳密にルールやスコアを決める必要があるゲームには向きませんが、ホラーゲームとは比較的相性が良い要素だと言えるでしょう。




また、さらに「足音を止めるが、ランダムでまた歩き出す」パターンを追加すると、プレイヤーをより翻弄し、感情を揺り動かすこともできるでしょう。

予定調和だったり、意表を突いたりといった演出のぶれを使ってプレイヤーを翻弄すれば、ホラーゲームの恐怖演出はより怖く、魅力的なものになるでしょう。
ホラーと相性のいいサウンドに一手間加え、聴覚からくる恐怖をグレードアップしてみてはいかがでしょうか。


さらに、次の記事では「ホラー演出における環境音」と題して、聞いているだけで不安になったり恐怖を掻き立てるような環境音を実装していきます。合わせて使用すると、さらなる演出のヒントになるかもしれません。

**UE5 + ADXを使った、ホラー演出における環境音の実装**

https://qiita.com/SigRem/private/93d37a711b4177d498ef