読者です 読者をやめる 読者になる 読者になる

ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

UE4で、地面の種類に応じた足音を鳴らすようにしてみる その2

UE4

前回のおさらい

pafuhana1213.hatenablog.com

前回の記事では、以下の処理について説明しました。

  • 足音を鳴らすタイミングの指定
  • 地面の種類の検出

今回の記事では、検出した地面の種類に応じて
足音を使い分ける処理の説明をします。

Animation BP内で鳴らす足音を選択する方法

前回の記事では、Ground Typeという整数型の変数に
判別した地面の種類を保存しました。

その変数が持つ値に応じて、音を鳴らす処理(Play Sound at Locationなど)を
呼んであげると、今回の目的である地面の種類に応じた足音を実現できます。
f:id:pafuhana1213:20150520232004j:plain

簡単で分かりやすいですね。しかし、幾つか気になる点があります。

  • 地面の種類が大量にあった場合は、ノードが無駄に膨れ上がる
    • 配列を使うのも手ですが、追加・削除・挿入が面倒です。
  • 鳴らしたいSEや条件を変更したい場合、サウンド担当の人がAnimationBPを弄る必要がある(または、AnimationBP担当に依頼する必要がある)
    • サウンド担当的には、できれば自分の担当範囲内で調整したい所です。
    • 担当外のAnimationBPを弄るのは嫌ですし、依頼を投げて対応完了するまで待つのは苦痛です。


ということで、もう少しシンプルなノード構成かつ
サウンド担当の人が気軽に調整できる方法を紹介します。


Sound Cue内で鳴らす足音を選択する方法

Sound Cueには、外部から与えられたパラメータを元に
鳴らす音や処理を分けることができるSwitchノードがあります。
そのSwitchノードを使うことで、地面の種類に応じて鳴らす足音を選択する処理を
サウンド側に持たせることができます。

※Sound Cueについて
Sound Cueでは、サウンドアセットに対してのフィルタ処理(距離減衰など)や、
ランダムで鳴らす音を選択する処理などを定義できます。勿論、ノードベースです。
wwiseなどのミドルウェアに比べるとできる事は少ないですが、個人で開発する分では
十分な機能が用意されています。
f:id:pafuhana1213:20150520234641j:plain
サウンド キュー エディタ | Unreal Engine
サウンド キュー リファレンス | Unreal Engine

では、実際にSound Cueを使って実装していきます。

足音SE用Sound Cueの作成

まずは、いつもの様にSound Cueアセットを新規作成します。
f:id:pafuhana1213:20150520235454j:plain
次に、ノードを組みます。左側の「Wave Player~」ノードは
通常のサウンドアセットで、コンテンツブラウザからD&Dで追加することができます。
複数アセットを一気に追加することも可能)
f:id:pafuhana1213:20150520235806j:plain
今回は、Switchノードのパラメータ名を「GroundType」にしました。

SoundCueにパラメータを渡す

次に、AnimationBP側からSound Cueにパラメータを渡します。
Sound Cueにパラメータを渡す際は、Audio Componentが持つノードを
使用する必要があるため、こんな感じのノード構成になります。
https://dl.dropboxusercontent.com/u/30427841/0519/Sound%20Cue.JPG
先ほどのPlay Sound at Locationノードを使う手法に比べて、
とてもシンプルな構成になりました。とてもいい感じです。

あとは、Audio Componentに先ほど作成したSound Cueを登録するだけです。
これで一見らく…
f:id:pafuhana1213:20150521000726j:plain
Animation BPだと、Auido Componentにサウンドアセットを
登録できません(4.7.6、4.8 Preview2で確認)

また、AudioComponentに対して、↓のように直接アセットを指定しても
上手く動作してくれません。
f:id:pafuhana1213:20150521001439j:plain

…ここまで来て諦めるのはアレなので、少し強引にAnimation BP内で
Audio Componentを扱えるようにしてみます。

Animation BPでAudio Componentを正常に扱うためには

バッドノウハウ臭はしますが、Animation BPを扱うActorに対して
Play Sound Attachedノードを使い、その戻り値(Audio Component型)を
利用することで、Animation BPでAudio Componentを取り扱うことができます。
https://dl.dropboxusercontent.com/u/30427841/0519/audiocomp.JPG
↑の処理を、Sound Cueへパラメータを渡す前に呼ぶと
Audio Component(が持つSound Cue)に対して無事処理が行われます。


最後に少しトラブルがありましたが、
以上で、地面の種類に応じた足音の使い分けの実装は終了です。

足音の使い分けは地味ではありますが、没入感が高まるので導入オススメです!
実装簡単なので、一度試してみてはどうでしょうか?


f:id:pafuhana1213:20150521003625j:plain
(最近クソ真面目な記事ばかり書いてるし、そろそろヘンテコ記事書こうかな…)