目次
はじめに
今回は銃を撃った時のリコイルパターンを実装してみる記事です。
実装内容はUE5.0.3、空のFPPサンプルで行っております。

▼この記事でできること

解説
⓪事前準備
1.とりあえず連射できるようにする
BP_FirstPersonCharacterを開きます。
イベントグラフのPrimaryActionを以下のように変更します。

0.1秒ごとに連射できるようになりました。

2.弾をライントレースに変更する
このオレンジの弾だと弾道落下が激しくパターン以前の問題なので、発射処理を変更します。
BP_Rifleを開きます。
OnFireProjectileから弾を生成せずにLineTraceを飛ばします。

音やアニメーションを再生したい場合はそのまま接続してください。

実行すると弾が当たった場所が分かりやすくなります。

これで事前準備は完了です。
①リコイルシステムの実装
BP_FirstPersonCharacterを開きます。
以下の2つを追加します。

これだけでリコイルは完成です。
実行してみましょう。
右上にブレが発生します。

左右をランダムにすることもできます。


②リコイルパターンのカーブを作成
Valに入力される値でブレを変更できることが分かりました。
カーブアセットを使って任意のリコイルパターンを作成してみましょう。
コンテンツ右クリックからその他、カーブを作成します。

CurveFloatを選択します。

名前をRecoil_Curveにしました。

開くとカーブを作成できます。
いよいよパターンを作っていきます。
リコイルパターンを設定しやすくする画像を作ったのでご自由にご利用ください。

〈使い方〉
まずペイントソフトでリコイルパターンを書きます。

だいたいの曲線が大きく動くところに点を打ちます。

水平に引いた線と赤の線が直交するところを参考にカーブを打っていきます。
1マスの間隔がUE上では0.2で左がプラス、右がマイナスです。

こんな感じにできたら

足を操作して滑らかにします。

③カーブをリコイルに反映する
BP_FirstPersonCharacterに戻ります。
変数を5個追加します。

RecoilCueveには作成したカーブを割り当てましょう。
まずは時間の設定です。
カーブアセットはInTimeの値から縦軸の値を返すので、InTimeがカウントアップするような仕組みを作ります。

RecoilTimeScaleが無いとカーブの横軸=5秒かかってしまうのでこの変数でリコイル速度を調節しています。

ここでは一度値をキャッシュしています。
0.1秒前のリコイル方向と後のリコイル方向の差分を比較することで左右どちらに動くべきかを判定するためです。

あとは比較した結果からカーブの絶対値に掛け算します。

RecoilStrengthはブレの強度です。Xが左右、Yが上下を指定しています。

最後にAddControllerにつなげます。
少しイレギュラー性を出すためにRandomで値を追加しています。

▼全体像

実行して同じようなリコイルパターンになっていれば成功です。
カーブアセットを入れ替えるだけで様々なパターンが作れるのでぜひ参考にしてみてください。


最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。