【UE5】右クリックで銃を構える!ズームする「Aim機能」を完全解説!
Tutorial Aim, AimSystem, Animation, FOV制御, TPS, Tutorial, UE, UE4, UE5, UnrealEngine, アニメーションBP, アニメーションブレンド, アンリアルエンジン, エイム機能, カメラズーム, ゲームプログラミング, ゲーム開発, ズーム, チュートリアル, ロジック構築, 構え, 視点切り替え, 銃を構える★今回作成するのはこちら★
今回は、右クリックをしたときにAimができる処理を組んでいきたいと思います。
また、右クリックを離すと元の画面距離に戻ります。
ロコモーションについても、押下しているときは専用のアニメーションを再生できるようにしていきます。
ということで早速やっていきましょう!
IAの作成

コンテンツドロワーを立ち上げます
その後、右クリックから入力の中にある「入力アクション」を選択し作成します。
名称は:「IA_Aim」にしております。
※各種名称は必ず同じにするよう指定しませんが、サイトを通して、同じにしておくと今後見やすいと思います。

InputActionが作成できたら、イベントグラフに移動し、配置します。
キャラクターブループリントを開きます。
イベントグラフで、検索バー(右クリック or Tab)を出して、「IA_Aim」を配置。もしくはコンテンツドロワーのIA_Aimをドラッグ&ドロップで配置。

マッピングコンテキストを開きます。
(ThirdPerson→Inputのフォルダ内にあります)
Mappingsとゴミ箱アイコンの間にある、+を押下します。
追加された項目にIA_Aimを設定
プルダウンから、右クリックを設定します。
これで、ゲームプレイすると、右クリックを押したときに通知を流すことができるようになります。

変数を作成します。
名称:IsAiming?
Setで2個配置して、下記を設定します。
Triggered:True
Completed:False
ABPのイベントグラフ設定

ABP_Mannyという名称になっているアニメーションブループリントを開きます。
(Characters→Manequins→Animationのフォルダに格納されてます)
開いたらイベントグラフに移動してCastを設定します。
Event BlueprintInitializeAnimationイベントから始まっている最後の実行ピンからBP_ThirdPersonCharacterをキャストします。
※検索するときは「cast to bp_ThirdPersonCharacter」で検索
アウトプットのピンを変数化しておきましょう!
今回名前は「GamePlayCharacter」にしています。

ノードを組んでいく前に、まずはデフォルトで配置されているSequenceのピンを一つ追加します。
ここでいうThen 3になります。
ピンは見て分かる通り、ピンを追加の⊕を押下すると追加が可能です。

追加ができたら上図のようにノードを組みます。
変数化したCharacterのキャストをゲットで配置し、右クリックから検証済みゲットに変換します。
そのSequenceの実行ピンを接続。
GamePlayCharacteのアウトプットピンから、Characterで作成したIsAiming?変数をゲットで配置。
配置したIsAimingをそのまま変数化して、IsValidの実行ピンと接続します。

変数を作成します。
変数の横にある⊕を押下して1つ変数を作成
方がBooleanになるので、Floatに変更します。
今回名称は:「AimOffset」にしております。

変数が作成できたら、セットで配置しているIsAiming?の実行ピンからBranchを配置します。
BranchノードのConditionには、IsAiming?の出力ピンをそのまま接続してください。
そして、先ほど作成したAimOffsetをセットで2つ配置して、BranchのTrueとFalseにそれぞれ接続します。
ここでは、上のAimOffsetの入力ピンに接続がありますが、後の工程になるので、ここでは、特に接続がなくて問題ないです。
ここまでの処理を書いたことによって、IsAiming?が右クリックをしているときは、Trueになり、クリックしていないときはFalseになるようになりました。
★Branchノードについてはこちら★
★Clampノードについてはこちら★

黄色枠部分で囲まれているノードがあると思います。
こちらをここでは、作成してください。
1.GameplayCharacter:変数からゲットで配置
2.GetBaseAnimRotation:変数ピンから配置して接続(そもそも接続されてる)
3.GetActorRotation:変数ピンから配置してい接続(そもそも接続されてる)
4.Delta(Rotator):検索して配置(右クリックからアウトプットを分割)
5.Multiply:検索して配置(下は-1を入力)
6.Clamp(Float):(「Min:-55」・「Max:55」を設定)
7.Clamp(Float)のアウトプットピンをTrueのAimOffsetに入力ピンに接続
アセットの追加

まずはアニメーションスターターパックをプロジェクトに追加します。
すでに、ライブラリに追加している方は、EpicGamesLauncherから追加してください。

※使うのは「Idle_Pistol」だけです。
追加しただけの状態では、プレイヤーキャラクターでは、アニメーションを使用できないので、リターゲットして、利用できるようにします。
まずは、リターゲットしたアニメーションシーケンスを格納するフォルダを作成します。
※任意で作成してください。
「AnimStarterPack」フォルダを開くとアニメーションが追加されていると思います。
そこにある、アニメーションシーケンスをどれか1つ右クリックしてください。
右クリックしたら「アニメーションをリターゲット」という項目が表示されるので、選択する。
別タブが表示されるので、ターゲットを「SKM_Manny」にして、シーケンスを全選択しエクスポートをします。
エクスポート時に作成したフォルダを選択してください。
ここまでできたら、リターゲットされたアニメーションシーケンスがフォルダに追加されたと思います。
AnimGraphの設定

ここからは、AnimationGraphの設定を行っていきます。
最初にグラフの全容を上図でお見せてしておりますが、難しくはないので、安心ください!
それじゃやっていきましょう!

まずは、Slot ‘DefaultSlot‘に接続されているMain Statesの接続を外します。
そしたらMain Statesのピンを引っ張りSaveSlotに保存します。
正式名称:New Save Cached Pose (直訳:キャッシュされたポーズの保存)

右クリックから「Layered blend per bone」を配置します。
さらに右クリックから「Main States」を配置してBase Poseに接続。
※こちらが、さっき保存したポーズになります。
アセットブラウザからIdle_Pistolを配置して、Blemd Poses 0に接続
詳細タブのコンフィグ→Layer Setupのプルダウンを押下する
Branch Filtersのエレメントを⊕を押して追加。
Bone Name:「spine_01」を入力

次に「Blend Poses by bool」を配置して、「Layered blend per bone」と接続します。
そうしたら、先ほどと同様に「Main States」を配置して、「False Pose」に接続します
「Blend Poses by bool」のActive Valueには「Is Aiming?」を接続します。

続いて「Transform(Modify)Bone」を配置します。
配置ができたら、詳細タブのスケルタルコントロールがあるので、「Bone to Modify」に「spine_04」を設定します。
Blend Poses by boolとTransform(Modify)BoneのComponent Poseを接続
接続すると、「Local To Component」が自動で間に接続
Transform(Modify)BoneのRotationピンを分割。
分割出来たら、Rotation X (Roll)に「Aim Offset」を接続
最後にアウトプットピンをDefaultSlotのインプットピンに接続して完了です!
(同じく接続するとComponent To Localが自動で配置されます)
カメラ設定

キャラクターブループリントに戻ります。
コンポーネントの「Character Movement」をゲットで配置し「Orient Rotation To Movement」と「Use Controller Desired Rotation」を2つずつ配置します。
TrueとFalseは画像の通りお願いします。

Add TimeLineを配置して、Triggeredの方の実行ピン(単純に上)をPlayに繋ぎ、Completed側の実行ピンはReverseに繋ぎます。
続いて、ゲットでコンポーネントタブから「FollowCamera」をゲットで配置し、「Set Relative Location」を配置します。
そしたら「Lerp(Vector)」を配置して、Set Relative LocationのNew Locationピンと接続しておきましょう。

Add TimeLineノードをダブルクリックして開きます。
開いたら、フロートトラックを追加します。名前は何でも大丈夫です。
キーを右クリックから追加して、時間と値を0に設定して、2個目のキーの時間と値を1に設定します。
最後に、キーを右クリックして自動(Auto)を選択して、完了です!
※戻ってAddTimeLineノードとLerpの接続を忘れないように
これでAim機能が実装できたと思いますので、ゲームをプレイしてみてください。
YouTubeとかもやってます
YouTubeでも動画投稿やってますので、そちらも遊びに来てもらえると嬉しいです。