【UE5】あちこちから話し声が飛んでくるというホラー？なBP作ってみた

こんにちは！　サウンド実装となると必要以上に熱くなるUE使い、kabgoyaです♪

今作っているゲームに実装したら思ったより面白くなかったのですが
Blue Print自体は何かの役に立ちそうなので備忘録として投稿いたします。

# どんな仕組み？
トリガーボリューム内でいろんな位置から話しかけられる(音が再生される)、と言った仕掛けです。
その方が不気味さが増すかな？と思ったのですが実装するレベルの関係でBGMとして流した方が不気味だった、というオチ(´・ω・｀)

#音は見えないのでキャプチャはイメージ
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/6380528f-d938-f647-01f6-8c7d9ca78da8.png)

# 素材のインポート
**用意するもの**
ランダムに再生する音声をたくさん
#10個以上あった方が楽しいかも。
#UE5.4はMP3もsoundwaveとして扱えるようになったけど音声ファイルは.wavで渡した方が親切
#あと、ファイル名は半角英数で、kabgoyaとの約束だ！

素材が集まったらフォルダごとコンテンツブラウザにドラッグアンドドロップしてインポート
インポートボタンを使うなどの判断はお好みで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/4ce19a98-5564-0c2e-88b7-89ce53ccb52d.png)
# Sound Cueの作成
Sound CueはUnreal Engineの音声アセットのひとつ
ランダム再生とかちょっとした音量調整とかできるので覚えといた方が便利なやつ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/e1751941-b0d1-3af7-461d-5bc78838bf93.png)

ランダムに再生させるにはSound Cueのノードをこんな感じで組み立てる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/2bc4f0de-ed46-cd3e-7886-ddc085372bb6.png)
**げっ？！**
って思ったそこのあなた、ご安心ください。
今回楽にこのノードが組める方法を見つけました。
#知ってる人はスルーしてください

インポートしたフォルダのサウンドウェーブを全選択し右クリック
メニュー上の方にある**単一のキューを作成**をクリックすると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/3dfd3b17-0e73-582d-ca99-38177545e9b0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/2bc4f0de-ed46-cd3e-7886-ddc085372bb6.png)
**中身がそのままRandom化！**
Wave Playerが自動で作られたらラッキー！ぐらいの認識でやってみたら想像以上に便利だったので得しました！
RandomVoice_Cueと名付けリバーブを掛けたかったのでアテニュエーション(減衰)の設定をちょっとしてSoud Cueの作業は終わり。
#本筋を大幅にそれるので今回、減衰やリバーブの話は割愛します。

# 素材側のBlue Print Classを作成
正直、SoundCueのまま再生する方法もあります
しかし実装する場所はゲームなのでメモリ負荷のことを考える必要もあります。詳しくは知らんけど。
なので役目を終えたら自ら消滅する仕掛けを作ります。

Blue Print Classを作成しBP_RandomVoiceと名付けます。
オーディオコンポーネントを追加し詳細>サウンド>SoundにRandomVoice_Cueを指定します

イベントリストはこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/5809cb9b-97ac-8a6a-2213-cb379c655ce0.png)
Delayの値は再生する音声ファイルの長さで変えてください
#Delayを入れないとすぐDestroy Actorが効いてしまうので肝心の音が聞こえてこない

# レベルにトリガーボリュームを配置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/98068007-dd85-bc78-bbcc-bade3332aab9.png)

PlayしてもわかりやすいようにPlaneを敷きました

ボイスをランダムに発生させる範囲を決めるためTrigger Volumeを配置します。

え？Audio Volumeでなくて？

Blue Print Classをランダムに発生させると考えたのでTrigger Volumeにしました
理論上はAudio Volumeでもいけると思う。
注意点は**ブラシセッティングで大きさを設定して下さい**
理由は後で使うからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/5ccb132a-9fcc-e08a-c350-75427201e725.png)
今回は　X:1000.0　Y:1000.0　Z:400.0　にしました。

# レベルブループリントに実装
使いまわしできるようにブループリントクラス化するか悩みましたが
他レベルでの使い回しを検証する時間がなかったのでレベルブループリントに実装します。

## Trigger Volumeの参照ノードを追加
Trigger Volumeを選択した状態でレベルブループリントを開き右クリックでCreate a Reference to Trigger Volumeを選択しトリガーボリュームの参照ノードを出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/9cbb37e1-6c7c-e969-8f7e-7601c44a9a3a.png)

## カスタムイベントノードを追加
右クリックし検索窓にadd Custom Eventと入力しカスタムイベントノードを作成しSpawnVoiceと名付けます。
以下のようにノードを接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/8f140e89-9b47-33b3-87fd-b63572f2b1bf.png)
1. Spawn Actorノードには先程作ったBP_RandomVoice　を選択します
2. Random Point in Boundinx BoxのHalf Sizeの中にTrigger Volumeのブラシセッティングの値を入力します。
#探せど参照する場所がわからなかったので手入力です…

## Event Begin Playで実行
Event Begin Play側はこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541757/98d1c6d9-2e81-51d3-3811-1725e7065757.png)
Set Timer By EventのTimeはお好みで変更して下さい。

# 結果
プレイしたらこんな感じになります
ヘッドフォンをするといろんな場所から話しかけられている感覚がわかるかと思います。
<iframe width="560" height="315" src="https://www.youtube.com/embed/d0CDt4eRZHE?si=XQhQpwH5cXFsYHnI" 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>

#不気味さを増したいのでレベルにリバーブを掛けています。
#音声は使用許可済です。

レベルの中に遮蔽物(壁など)が多いと3Dサウンドがうまく働かないようです。
もしかしたら臨場感を出したくて減衰のオクルージョン設定を触ったのがうまくいかないのかもしれませんが
検証できたら追記します。

それでは良きサウンド実装ライフを！