0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-06-29

はじめに

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

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

前提

当記事では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

実装

AtomCraftでサウンドをデザインする

マテリアルの用意

サウンドオーサリングツール「AtomCraft」で足音と風切り音のサウンドを作っていきます。
今回は次のようなマテリアル(音源)を用意しインポートしました。
A01.png
歩行時の足音、ダッシュ時の足音、風切り音の3つです。風切り音だけはループ素材を想定しています。

足音を作る

足音となるキューを作成します。
ワークユニットツリーのキューシートを右クリックし、「新規オブジェクト」→「キュー『ポリフォニック』の作成」です。
A02.png
作成されたキューに名前をつけます。ここでは「Cue_Act_Locomotion」としました。
トラックリストに歩行時とダッシュ時の足音のマテリアルをドラッグ・アンド・ドロップで配置します。
A03.png
歩行時のトラックを選択し、右クリックして「新規オブジェクト」→「AISACの作成」を選択します。
A04.png
AISACの追加ウィンドウが出現するので、「Aisac_Act_Dash」とでも名前をつけておきましょう。
今回はAISACコントロールのIDは一貫して0番を使用します。これにより、ダッシュのパラメータひとつですべてのサウンドの変化が実現できるためです。
AISACグラフタイプは「ボリューム」のままでOKです。
A05.png
「AISACリスト」の「ボリューム」を選択してグラフを編集します。
A06.png

「ダッシュ値」(移動速度)が上がるほど足音が歩行時からダッシュ時のものに切り替わってほしいため、グラフを右肩下がりにします。ダッシュ値が上がれば歩行時のサウンドがフェードアウトしていくわけです。
A06b.png
設定が済んだら左下のタブからタイムラインに戻ります。
A06c.png
今度はダッシュ時のトラックに対してAISACを作成します。
A07.png
AISACの追加も同様です。
A08.png
こちらはグラフを右肩上がりにします。歩行時はダッシュ音声は聞こえず、ダッシュ値が上がるほどダッシュ用のサウンドに置き換わっていきます。
A09.png
上部のスライダーを動かして音の変化を確かめてみましょう。
A10.png

タイムラインに戻り、トラックリストの空欄で右クリックし、AISACを追加します。
A11.png
使用するAISAC名、AISACコントロールIDは同じですが、グラフタイプを「ピッチ」にします。
A12.png
今度は青いグラフを編集し、ダッシュ値が上がるとピッチが少しだけ上がるようにします。
これにより、速度による細かな足音の変化を表現できます。
A13.png

風切り音を作る

風切り音を作ります。
まずはマテリアルツリーの風切り音のマテリアルを選択し、インスペクターにてループ情報の上書きを「True」に、ループタイプを「ループ」に設定します。これでこのマテリアルはループ素材として扱われることになります。
A14.png
キューを作成します。「新規オブジェクト」→「キュー『ポリフォニック』の作成」を選択。
A15.png
キュー名を「Cue_Act_DashWind」とし、風切り音のマテリアルをドラッグ・アンド・ドロップして配置します。
テスト再生し、キューがループ再生されることを確認します。
A16.png
トラックリストの空欄で右クリックし、「新規オブジェクト」→「AISACの作成」を選択します。
A17.png
AISACの追加ウィンドウでは同様のAISAC名にし、グラフタイプを「ピッチ」にします。
A18.png
AISACコントロールのグラフでは、数値が上がるごとにピッチも上がっていくよう編集します。
右側の「ポイントリスト」で数値を入力するとかっちり設定できます。
A19.png
グラフができたら、スライダーを動かして音の変化を確認してみましょう。

キューシートのビルド

ここまでできたら、キューシートをビルドします。
A20.png
A21.png

ここからUEに移っていきます。

UEでサウンドを再生する

キューシートのインポート

ビルドしたacf,acbファイルをコンテンツブラウザにインポートします。
B01.png
B01b.png
ツールバーの「Edit」→「Project Settings」を開きます。
B01c.png
CriWareタブの「Atom Config」に、ビルドしたacfファイルを指定します。
B01d.png

ダッシュアクションの実装

キャラクターのダッシュを簡易な方法で実装してみます。
まずはダッシュの入力キー(ボタン)を定義します。
プロジェクト設定を開き……
B02.png
Inputタブの「Bindings」→「Action Mappings」の+ボタンを押し、キー入力を追加します。
B03.png
「Dash」と名前をつけ、左シフトキーなどのキーを設定します。
B04.png
キャラクターのブループリントを開きます。
イベントグラフに、移動処理などの横にInputAction Dashイベントを追加します。
B05.png
「Pressed」「Released」の処理を次のようにつなげます。
ダッシュボタンが押されたら移動速度が「1000」になり、離したら「400」になるだけの簡単なダッシュ機能です。
B06.png

キャラクターに足音をつける

キャラクターの移動アニメーションを開きます。
B07.png
タイムライン上で右クリックし、「Add Notify」→「New Notify」を選択します。
B08.png
Notifyが追加されるので、「Footstep」と名前をつけます。Notifyはアニメーションの任意のタイミングに組み込め、その時点でイベントを発火させる機能です。
B09.png
右上のタブからBlueprintを押し、キャラクターのアニメーションブループリントに移動します。
B10.png
AnimNotify_Footstepイベントを配置し、Spawn Atom Sound at Locationノードでサウンドを鳴らします。
「Sound」ピンに忘れず「Cue_Act_Locomotion」を指定します。
B11.png
Spawn Atom Sound at Locationは再生用のパラメータを指定してあげる必要があるため、青いインプットピン「Params」から線を伸ばしてMake AtomComponentParamsノードを置きます。
B11b.png
ノードの中身はいじらなくても大丈夫です。
B11c.png

ダッシュ時に足音を変化させる

まずはアニメーションブループリント側でキャラクターがダッシュしているかどうかの情報を受け取りたいため、変数を作成します。
Float型の「Dash」という変数を作成しました。これがAtomCraftで想定していた「ダッシュ値」になります。
B12.png
キャラクターのブループリントに戻ります(アニメーションBPではありません)。
Event Begin Play時にキャラクターモデルを動かしているアニメーションブループリントにキャストします。
B13.png
Castノードの青いアウトプットピンを右クリックし、「Promote to Variable」で変数化しておきましょう。
いちいちキャストしなくても、スムーズにアクセスできるようになります。
B14.png
変数化し、「MyAnim」と名前をつけました。
B15.png
これでアニメーションブループリント内の変数「Dash」にアクセスできるので、ダッシュ始動時、終了時に値を代入します。
B16.png
ふたたびアニメーションブループリントに戻ります。足音のAtomCueに対して、Set Aisac by NameでAISACコントロールを行い足音を変化させます。
B17.png

ダッシュ時に風切り音を再生する

風切り音の実装はゲーム開始時からボリューム0の状態でキャラクターに追従させておき、ダッシュ時に音量を変化させる、というアプローチをとります。
Event Begin Playの後にSpawn Atom Sound Attachedノードでキャラクターにサウンドを追従させます。
これも「Promote to Variable」で変数化しておきましょう。
B19.png
ダッシュ時に音量を滑らかに変化させたいので、タイムラインノードを活用します。
「Add Timeline」でタイムラインを追加します。
B20.png
ダッシュ始動時に「Play」、ダッシュ終了時に「Reverse」につなげます。
B21.png
タイムラインノードをダブルクリックして開きます。
Floatトラックを追加します。タイムラインの長さは1秒とします。
B22.png
1秒かけて値が0~1に上昇するグラフを作ります。
B23.png
グラフで変化した値をAisacコントロールの値に代入します。
B24.png
これでダッシュ時に風切り音がフェードイン、フェードアウトするようになりました。

ひとまずここでダッシュに関わるサウンド演出は実装できましたが、次の記事で「ダッシュ速度、音が段々と変化していく」「より速い速度での演出」などについて改善する実装についてまとめています。よろしければこちらもぜひ。

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

0
0
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
0
0