1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

キャラクターのダッシュアクションのサウンド表現(発展編)

Last updated at Posted at 2022-06-29

はじめに

アンリアルエンジン4とサウンドミドルウェア「ADX for UE4」を使いて、アクションゲームなどにおけるキャラクターのダッシュ表現を、サウンド方面からアプローチする記事です。

ここではキャラクターの足音と風切り音にフォーカスし、たとえば移動速度が速くなるにつれ足音が軽く、高い音に変わっていったり、ダッシュ中に限り体が風を切る音が追加されたりといった表現を使い、アクションのサウンドを差別化していきます。

この記事は以下の記事で実装した機能をベースにしています。

キャラクターのダッシュアクションのサウンド表現(基本編)
https://qiita.com/SigRem/private/566cf3dceaf74527aa56

前提

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

なお、最近ADX2からADXへ名称が変更になりましたが、ツール構成は変更ありません(2がないから古いほう、というわけではありません)。

記事執筆時点のADX for UE4のSDKバージョンはv1_29です。

ADX2 for UE4の導入や基本的な使い方は以下の記事にあります。必要に応じて参照してください。
ADX2 for UE4の導入で、一歩上のサウンド表現を(導入編)
https://qiita.com/SigRem/items/4250925f6d66a4fd287a
ADX2 for UE4の導入で、一歩上のサウンド表現を(実践編)
https://qiita.com/SigRem/items/c089b71c42e898980a46

実装

キャラクターのダッシュを徐々に加速させる

基本編で実装したキャラクターのダッシュ機能を改善します。
ボタンを押している間だけ走る速度が上昇していき、ボタンを離すとすぐに元の速度に戻ります。
3つ新規に変数を追加します。
ダッシュしている状態を示すBool型の「bDash」、現在の速度を示すFloat型の「DashSpeed」、加速する速さを示すFloat型の「AccelSpeed」です。
A01.png
デフォルト値は「DashSpeed」が「400」、「AccelSpeed」が「100」とします。
A01b.png
ボタン入力時のイベント処理を対応させます。
スピードの変化はTickイベント内で処理してしまうので、ここではボタンを押したかどうかというステータスだけを変化させます。
A02.png
また、風切り音のボリューム変化もこの後につなげてしまいます。
A03.png

Event Tickに処理を書いていきます。
まずは現在ダッシュ状態かどうかを判別し……
A04.png
「Dash Speed」に加算を加えます。アクセルスピードを加えますが、処理速度によって加速速度に影響が出ないようGet World Delta Secondsをかけます。
A05.png
ダッシュ状態がFalseの方に処理をコピペし、速度を急速に減算するためさらに「-5」をかけます。
A06.png
このままでは再現なく加速・減速してしまうため、**Clamp(float)**ノードで変数の最大値・最小値を制限してあげます。
A07.png
「DashSpeed」の値を移動速度に渡してあげればダッシュ処理は完成です。
A08.png

加速度に合わせて変化するサウンド

基本編で実装した足音の変化に加え、風切り音のピッチ変化も新しいダッシュ処理に合わせて実装してみましょう。
AISACコントロールに数値を渡したいので、現在どれくらい加速しているかを「0.0~1.0」の間で算出する必要があります。
変数「DashSpeed」から基本速度である「400」を引き、そこから最大速度までを割り算で出せば良さそうです。
A09.png
出した数値をアニメーションブループリントの変数「Dash」に渡します。
A10.png
AISACコントロール自体は基本編で実装したように、アニメーションブループリント側で行ってくれるのでこれで足音に変化が起きるようになります。
Set Aisac by Nameノードを使い、同じ数値を風切り音のAtomComponentに対して渡せば風切り音のピッチにも速度に応じて変化がかかります。
A11.png

最高速状態で追加されるサウンド

ダッシュ機能の仕上げとして、最高速に達した際へのプレイヤーへのフィードバックとして、特別なサウンドを追加してみましょう。
これ以上速度が上がらないことを伝えられますし、心地よい音であればそれ自体が上手な操作をしたプレイヤーへの報酬となりえるでしょう。

まずはAtomCraftでサウンドを追加します。
B01.png
今回は「キーン」という高い音をマテリアルとして加えました。
通常の風切り音と同じように、ループするようインスペクターにて設定しておきます。
B02.png
風切り音のキューに、新しいトラックとして追加します。
B03.png
ISACコントロールを追加します。
B03b.png
基本的な実装と同じように、「ダッシュ値」用のISACコントロールIDを流用します。
B04.png
グラフは最高速付近で急速に上昇する形にします。
B05.png
加速中は単純にピッチが上がっていくだけですが、最高速が近くなると新しいサウンドが聞こえだすようになります。
音が重なってしまったり、音割れが気になる場合は通常の風切り音のトラックにもAISACコントロールを追加し、新しい風切り音と入れ替わりにフェードアウトするようにグラフを編集してみましょう。
B06.png
ここまでできたら再度キューシートを書き出します。

UEに移動し、再度キューシートをインポートすると、処理を変えずともダッシュの音が変化するようになっているはずです。

このように、AtomCraftでサウンドを編集することでUE側で新しいプログラムを書かなくとも音に変化を与えることができます。用途や担当に合わせて使い分けていくと便利かもしれません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?