［UE5］三人称カメラ視点で、プレイヤーの位置とカメラの向きに合わせたサウンドが聞こえるようにする

# 事前準備
サウンドがどの方向から、どの程度の音量でなっているかを確認していただくために、イヤホンをつけて動画を見ていただきたいので、イヤホンを準備していただけると幸いです。


# 概要
Unreal Engine 5の三人称カメラ視点では、デフォルトだと下の動画のような音の聞こえ方がします。

**※音が大きく聞こえるかもしれませんので、ご注意ください。**
<iframe width="640" height="360" src="https://www.youtube.com/embed/8ZbEl-11Qws" title="sound 1 4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

この記事では、下のように、プレイヤーの位置に合わせた音量で、カメラの向きに合わせた適切な方向からサウンドが聞こえるようにします。

<iframe width="640" height="360" src="https://www.youtube.com/embed/MXSdRMCYnvE" title="sound 1 6" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# この記事の主な対象者
- BPの作り方の基礎を習得されている、初心者の方



# 1. プレイヤーの位置に合わせた音量で音が聞こえるようにする
**※音が大きく聞こえるかもしれませんので、ご注意ください。**

<iframe width="640" height="360" src="https://www.youtube.com/embed/8ZbEl-11Qws" title="sound 1 4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

まずは、上の動画のように、三人称カメラの角度を変えることによって、聞こえる音量が異なる理由についてお話していきたいと思います。<br><br>

上のようになる理由は **「サウンドが聞こえる範囲に、プレイヤーが保持しているカメラが入ったら音が聞こえるようになっているから」** です。<br><br>

サウンドの聞こえる範囲を可視化すると、下図のようになっています。黄色い線の半球の中が、サウンドの聞こえる範囲となっています。

![sound_range.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/be53f908-e547-c3bd-f192-fb0204bab886.jpeg)

上の動画のように、カメラの角度によって聞こえる音量が小さくなっていたり、聞こえなくなっていたときは下図のように、プレイヤーの保持するカメラがサウンドの聞こえる範囲の中心から離れている状態にありました。

![camera_has_ears1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/ae2e810b-2f2b-9322-5ae1-d55266a7edc5.jpeg)


逆に、カメラの角度によって、聞こえる音量が大きくなっていたときは、下図のように、プレイヤーの保持するカメラがサウンドが聞こえる範囲の中心に近づいている状態にありました。

![camera_has_ears2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/ea7f8908-1a38-cc08-0e79-63b66d2df6a3.jpeg)<br><br>


サウンドが適切な音量で聞こえるようにするためには、プレイヤーの保持するカメラのではなく、**プレイヤー自身がサウンドの聞こえる範囲内に入ったらサウンドが聞こえるようにする**必要があります。

そのため、これからプレイヤー自身がサウンドの聞こえる範囲内に入ったらサウンドが聞こえるようにしていきます。<br><br>


まずは、プレイヤーのBlueprintを開き、イベントグラフを開きます。

次に、下図のようなノードを組みます。

![graph1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/d14cf16c-7fad-c06d-d706-1408510f1103.jpeg)

「Mesh」ノードは、プレイヤーのスケルタルメッシュを指しています。<br><br>

これで、プレイヤーのメッシュがサウンドの聞こえる範囲内に入ったら、サウンドが聞こえるようになります。
下の動画のようにサウンドが聞こえるようになっているか、確認します。

<iframe width="640" height="360" src="https://www.youtube.com/embed/JIoJb2Mobtw" title="sound 1 5" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

上の動画を見ていただいてお気づきになったと思いますが、この時点では下記の問題があります。

- サウンドの聞こえる方向がプレイヤーメッシュの方向に合わせた方向になっている
<br>
下図のように、三人称視点の画面を見ている人の視点からだと、右側に音源があるけれど、プレイヤーのメッシュから見ると左側に音源があるというような場合、左側から音源が聞こえるようになっていてほしいです。

![sound_direction_wired.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/a8402b3d-bcc8-22c6-5487-2af5115277aa.jpeg)


なので、次は三人称視点のカメラの向きに合わせた方向からサウンドが聞こえるようにしていきます。


# 2. カメラの向きに合わせた適切な方向からサウンドが聞こえるようにする

まずは、プレイヤーのBlueprintを開き、プレイヤーのカプセルコリジョンコンポーネントの下の階層（プレイヤーのスケルタルメッシュと同じ階層）に、SceneComponentを追加します。この記事では、追加したSceneコンポーネントを「PlayerEars」という名前にします。

Sceneコンポーネント「PlayerEars」の位置は、カプセルコリジョンコンポーネントと同じ位置にしたいので、Sceneコンポーネント「PlayerEars」の相対位置は0にします。

![playerearscomponent.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/3c75d533-720c-60c7-8ab9-c5ffc01f02fa.jpeg)<br><br>

次は、プレイヤーのBlueprintのイベントグラフを開き、下図のようにノードを組みます。

![graph2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/ae74f5f9-2446-855b-0915-f17549d9fc9e.jpeg)

「Follow Camera」ノードは、プレイヤーを映している、三人称カメラのコンポーネントのノードです。<br><br>


下の動画のように、サウンドがカメラの向きに合わせた適切な方向から聞こえるようになっているか確認します。

**※音が大きく聞こえるかもしれませんので、ご注意ください。**

<iframe width="640" height="360" src="https://www.youtube.com/embed/MXSdRMCYnvE" title="sound 1 6" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br><br>


以上で完成です。
最後まで読んでいただき、ありがとうございました。