前回のおさらい
前回の記事では、以下の処理について説明しました。
- 足音を鳴らすタイミングの指定
- 地面の種類の検出
今回の記事では、検出した地面の種類に応じて
足音を使い分ける処理の説明をします。
Animation BP内で鳴らす足音を選択する方法
前回の記事では、Ground Typeという整数型の変数に
判別した地面の種類を保存しました。
その変数が持つ値に応じて、音を鳴らす処理(Play Sound at Locationなど)を
呼んであげると、今回の目的である地面の種類に応じた足音を実現できます。
簡単で分かりやすいですね。しかし、幾つか気になる点があります。
- 地面の種類が大量にあった場合は、ノードが無駄に膨れ上がる
- 配列を使うのも手ですが、追加・削除・挿入が面倒です。
- 鳴らしたいSEや条件を変更したい場合、サウンド担当の人がAnimationBPを弄る必要がある(または、AnimationBP担当に依頼する必要がある)
- サウンド担当的には、できれば自分の担当範囲内で調整したい所です。
- 担当外のAnimationBPを弄るのは嫌ですし、依頼を投げて対応完了するまで待つのは苦痛です。
ということで、もう少しシンプルなノード構成かつ
サウンド担当の人が気軽に調整できる方法を紹介します。
Sound Cue内で鳴らす足音を選択する方法
Sound Cueには、外部から与えられたパラメータを元に
鳴らす音や処理を分けることができるSwitchノードがあります。
そのSwitchノードを使うことで、地面の種類に応じて鳴らす足音を選択する処理を
サウンド側に持たせることができます。
※Sound Cueについて
Sound Cueでは、サウンドアセットに対してのフィルタ処理(距離減衰など)や、
ランダムで鳴らす音を選択する処理などを定義できます。勿論、ノードベースです。
wwiseなどのミドルウェアに比べるとできる事は少ないですが、個人で開発する分では
十分な機能が用意されています。
Unreal Engine | サウンド キュー エディタ
Unreal Engine | サウンド キュー リファレンス
では、実際にSound Cueを使って実装していきます。
足音SE用Sound Cueの作成
まずは、いつもの様にSound Cueアセットを新規作成します。
次に、ノードを組みます。左側の「Wave Player~」ノードは
通常のサウンドアセットで、コンテンツブラウザからD&Dで追加することができます。
(複数アセットを一気に追加することも可能)
今回は、Switchノードのパラメータ名を「GroundType」にしました。
SoundCueにパラメータを渡す
次に、AnimationBP側からSound Cueにパラメータを渡します。
Sound Cueにパラメータを渡す際は、Audio Componentが持つノードを
使用する必要があるため、こんな感じのノード構成になります。
先ほどのPlay Sound at Locationノードを使う手法に比べて、
とてもシンプルな構成になりました。とてもいい感じです。
あとは、Audio Componentに先ほど作成したSound Cueを登録するだけです。
これで一見らく…
Animation BPだと、Auido Componentにサウンドアセットを
登録できません(4.7.6、4.8 Preview2で確認)
また、AudioComponentに対して、↓のように直接アセットを指定しても
上手く動作してくれません。
…ここまで来て諦めるのはアレなので、少し強引にAnimation BP内で
Audio Componentを扱えるようにしてみます。
Animation BPでAudio Componentを正常に扱うためには
バッドノウハウ臭はしますが、Animation BPを扱うActorに対して
Play Sound Attachedノードを使い、その戻り値(Audio Component型)を
利用することで、Animation BPでAudio Componentを取り扱うことができます。
↑の処理を、Sound Cueへパラメータを渡す前に呼ぶと
Audio Component(が持つSound Cue)に対して無事処理が行われます。
最後に少しトラブルがありましたが、
以上で、地面の種類に応じた足音の使い分けの実装は終了です。
足音の使い分けは地味ではありますが、没入感が高まるので導入オススメです!
実装簡単なので、一度試してみてはどうでしょうか?
(最近クソ真面目な記事ばかり書いてるし、そろそろヘンテコ記事書こうかな…)