UE4で、地面の種類に応じた足音を鳴らすようにしてみる その1
はじめに
足音に拘っているゲームっていいですよね。心が洗われます。
ということで、今回は地面の種類に応じて足音を使い分けてみます。
作ってみた一例
(SEは全曲無料・フリー音楽素材/魔王魂より、テキトーにチョイス)
youtu.be
処理の流れ的には、以下の様な感じです。
- 足音を鳴らすタイミングの指定
- 地面の種類の検出
- 検出した地面の種類に応じた足音を鳴らす
参考サイト様
花咲か妖精 ウルトラアンコール
足音を鳴らすタイミングの指定
足音を鳴らしたいモーションに
足音を鳴らすタイミングを埋め込みます。
モーションアセットを開き、通知バー(?)上で開ける
右クリックメニューから通知を追加するだけです。超簡単です。
今回はFootStepという通知を追加しました。
通知を追加すると、AnimationBPのEvent Graph上で
追加した通知と同じ名前のイベントノードが使えるようになります。
このイベントノードは、先ほど埋め込んだタイミングで動作します。
ということは、このイベントノードに以下の処理を繋げると
いい感じに足音の使い分けが実装できそうです。
- 地面の種類の検出
- 検出した地面の種類に応じた足音を鳴らす
捕捉
足音を使い分ける必要のない場合は、アニメーションの通知バーに
通知ではなく、サウンドを埋め込むと簡単に鳴らすことができます。
また、サウンドの他にもエフェクト(例:土煙)を埋め込むことができます。
地面の種類の検出
地面の情報を取得
地面の判定には、Line Traceを使います。真下に向かって線を引き、
衝突した部分を地面と見なして、衝突情報から地面の情報を取得する感じです。
サクッとノードを貼ります。本来は足の位置で線を引くべきですが、
ノードの簡略化のため、単純にActorの座標を使っています。
また、座標に対して加算減算している部分はてきとーな値です。
状況に応じて、いい感じに調整するといい感じになると思います。
捕捉:Line Traceに関しては、以下のページが参考になると思います。
Unreal Engine | ブループリントにおけるレイキャスト(トレーシング)の使い方
地面の種類を判別
Line Traceを使うことで、(おそらく)地面であるオブジェクトの
情報を取得することができました。次は、その情報を元に
その地面の種類(草原?荒れ地?など)を判別します。
今回は、以下の2通りの方法を使って、地面の種類を判別してみました。
- Tag
- Surface Type
Tagを使った方法
コリジョン(当たり判定)でよくお世話になるTagを使う手法です。
まずは、地面に当たるActorのActor Tagに
判別用の文字列を入力します(Component Tagではありません)。
そして、Line Traceで取得したActorが持つTagと
先ほど入力した名前と比較し、地面の種類を判定します。
(後々の処理の都合で、Ground Typeという整数型の変数に判定結果を入れています)
この手法は単純で良いのですが、ノードが汚い + Tag名の入力ミスの可能性という
欠点があります。10数個並ぶBranchはあまり見たくないものです。
Surface Typeを使った方法
こちらは、物理マテリアルのSurfaceTypeを使う手法です。
Tagを使った手法に比べて、とてもシンプルなノードで地面の種類を判別できます。
が、幾つか下準備が必要になります。
まずは、地面の種類に応じたSurface Typeを定義します。
定義は、「プロジェクト設定」→「物理」→「Physical Surface」で行います。
次に、地面の種類に応じた物理マテリアルアセットを作成します。
そして、そのアセットのSurfaceTypeに先ほど定義したパラメータを指定します。
最後に、地面に当たるActorに対して、物理マテリアルアセットを割り当てます。
これで下準備は終了です。お疲れ様でした。
あとは、Line Traceで取得した情報からSurface Typeを抽出するだけです。
こんな感じに。
ふふ、なんてシンプルで美しいノードなんだろう…
あとは、判別した地面の種類に応じて足音を鳴らすだけです!
なのですが、記事が長くなってきたので、今日はここまで。
(眠くなってきたからだなんて、口が裂けても言えないや…ZZZ…)