ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【UE4・UE5】〈Tips〉ActorComponentでキャラクターの足跡と足音を自動化しよう

目次

 

はじめに

この記事はブループリントオンリーです。

キャラクターに足跡を付ける方法はデカールを利用してアニメーション通知をきっかけに生成する紹介がされています。


今回の記事も以下のサイトを大変参考に記述しております。

▼紹介している神サイト様

anapurna.co.jp

logicalbeat.jp

しかし、アニメーションの点数が多くなると埋め込むアニメーション通知の量が膨大になり、骨が折れるので負荷や安定性を犠牲に半自動化する方法を紹介します。

また、キャラクターが増えても簡単に反映できるようにアクタコンポーネントに実装を分離して使いまわしができるような仕組みにしてみようと思います。


▼ これだけで実装完了

 

個人の備忘録としてまとめています。誤った情報がある場合があります。

コメントにてご指摘のほどお願いいたします。

UE5.4.3TPテンプレートで解説します。

 

解説

⓪事前準備

足跡用のデカールマテリアルを作成します。

テクスチャとマテリアルはこちらの記事を参考に作成いたしました。

anapurna.co.jp



①ActorComponentの作成

ブループリントの新規作成を行い、アクタコンポーネントを選択します。

 

名前はB_FootStep_Componentにしました。

 

②変数の追加

作成したActorComponentを開いて変数を追加します。

変数は以下の通りで、StepSoundMap以外プライベートにチェックを入れます。


SceneComponent の TargetSceneComponent

AudioCompoent のFootStepAudioCompoent
Bool の bEnableFootStepDecal

Bool のbEnableFootSound

Name の Socket_L

Name の Socket_R

Float の ZStepCheckLength

マテリアルインターフェースのDecal MaterialL

マテリアルインターフェースのDecal MaterialR

 

こちらはインスタンス編集可能にチェックを入れておきます。

物理マテリアルとサウンドウェーブのマップのStepSoundMap

 

③関数の追加

 

変数を外部から更新するセッター関数を用意します。

SetEnableFootStep

※軽量化のために無効時にTickを止めます。

 

SetEnableFootSound

※軽量化のために無効時にTickを止めます。

 

SetTargetMeshComponent

 

SetDecalMaterial

 

SetFootCheckLength

 

SetSocketName

 

OverrideStepSoundMap

 

 

最後に初期化をまとめて行うための関数を用意しておきます。

InitializeFootStepSettings

お好みのデフォルト値を設定しておきます。

 

④イベントグラフの実装

イベントグラフを開き実装していきます。
▼全体像


オーディオコンポーネントを動的に追加します。

 

Tick処理

 

LRで処理が重複するのを避けるのと、DoOneceは関数で使えないのでイベントグラフに書いています。違いはSocket名とデカールのみです。


左足


右足

 

クラスのデフォルトからTick処理が自動で走らないようにStartWithTickEnabledのチェックを外します。

⑤使ってみよう

足音用の音源をいろいろプロジェクトに入れておきます。

 

足音や足音を反映したいBPを開きます。

(テストでサードパーソンテンプレートのBP)

 

作成したコンポーネントを追加します。

 

どの物理マテリアルでどの足音を鳴らすかのマップを登録します。

プロジェクト全体で共通にする場合は、コンポーネントのデフォルト値にしておくといいでしょう。

 

あとはBeginplayでInitializeFootStepSettingsを呼び出し自由に利用できます。

 

Socket名はモデルに応じた足の位置です。

ZLengthは足の位置からどれくらい地面に近くなったら設置していると判定するかの距離です。

 

コンポーネントのLineTraceByChannelのDebugTypeを表示することで調整しやすくなります。

 

お疲れさまでした!

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやX(Twitter)のフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。

投げ銭を投げる