UE5のパンチ攻撃について
UE5でパンチ攻撃を行いたいことは多いはず。格闘戦主体のゲームではもちろん、TPSやFPSといった銃撃戦主体のゲームでも大抵パンチは実装されている。
これまでの以下の記事で銃を持たせ、エイムし弾を撃ちダメージを与えられるようにしており、この記事ではこれらをベースに新たに操作キャラがパンチ攻撃を行えるようにしていこうと思う。
④視点変更
⑤弾を撃つ
⑦死亡処理
先に確認してみてほしい。
Get・SetやSequenceやBranchといった基礎的なノードがわからない場合は先に以下記事を確認してほしい。
アンリアルエンジンのノードの一覧UE5のパンチ攻撃の目次
パンチ攻撃アニメーションの準備パンチの攻撃判定の長さを指定
パンチのコリジョンを設定
パンチ攻撃のキー入力処理作成
インターフェース作成
Animnotify作成
目次にもどる
パンチ攻撃アニメーションの準備
パンチ攻撃アニメーションとして、無料のアニメーションが多数あるMixamoからとってくる。
以下からMixamoのサイトに入り、Animationタブを選択し、punchと検索すれば様々なパンチのアニメーションアセットが出てくる。
MixamoConverterを使って好きなアニメーションを取得し、自分のプロジェクトにインポートしよう。
MixamoConverterの使い方がわからない場合は以下の記事で紹介しているので確認してほしい。
MixamoConverterの使い方目次にもどる
パンチの攻撃判定の長さを指定
パンチのアニメーションは手を後ろに下げてからパンチを繰り出し、その後は元の姿勢に戻る。一番最初やパンチを打ち終わった後に攻撃判定があるのは不自然だ。
.jpg)
そこでパンチの打ち始めから打ち終わりまでを攻撃判定に指定できるように設定を行っていく。
パンチ攻撃アニメーションに判定の長さを設定するためのAnimnotifyの作成を行っていく。
コンテンツドロワーの任意の場所で右クリックしブループリント→ブループリントクラスと選択。
.jpg)
以下の画面でAnimNotifyStateを検索して出し、選択ボタンを押して作成する。ファイルの名前をANS_Attackとする。
.jpg)
先ほどプロジェクトに入れたパンチ攻撃アニメーションシーケンスファイル(自分の場合はPunching_UE_Anim)を選択して右クリックし、作成する→AnimMontageのように選択。できたファイルの名前をAM_Punching_UEとする。
.jpg)
AM_Punching_UEを開く。
.jpg)
通知の1の部分で右クリックし、通知ステートの追加を選び、ANS_Attackを選択する。
.jpg)
追加されたANS_Attackはドラッグ&ドロップすることで長さを変更可能。シフトキーを押しながらドラッグ&ドロップするとキャラのアニメーションの動きに合わせてANS_Attackの長さを変更でき非常に便利だ。
.jpg)
パンチの打ち始めからANS_Attackが始まり、打ち終わりでANS_Attackが終わるようにすればOKだ。
目次にもどるパンチのコリジョンを設定
BP_Player(操作キャラのブループリント)を開く。
コンボーネントタブで追加を押し、SphereCollisionを選択する。
.jpg)
できたSphereをMeshの子として配置する。名前をRightPunchCollisionとする。
.jpg)
RightPunchCollisionを選択して、詳細タブのソケットの親ソケットの項目をhand_r(右手)とする。
.jpg)
これでRightPunchCollisionが右手を原点として配置される。
RightPunchCollisionの大きさを右手を覆う程度に調整する。以下のようにトランスフォームの拡大・縮小で鍵部分をタップし、以下のように鍵をかけたマーク(XYZ方向に均一に拡大・縮小)にして、調整するのがおすすめ。
.jpg)
だいたい以下のようにCollisionが設定できればOKだ。
.jpg)
次にコリジョン設定を行う。引き続きコンポーネントタブのRightPunchCollisionを選択した状態で、詳細タブのコリジョンプリセットを変更していく。
以下のようにコリジョンプリセットをCustomにし、Collision EnabledはNo Collisionにする(最初はコリジョンはない状態にしておき攻撃時にこの項目を変更する想定)。応答はEnemyだけ「オーバーラップ」、残りは「無視するにチェックをつける」(敵にのみ操作キャラの攻撃は当たればいい)。

BP_Playerの親クラスであるBP_Characterを開き、変数を追加する。
型は球面コリジョン。名前はAttackCollisionとする。

後述するが、この変数にRightPunchCollisionを入れて使っていくことになる。
目次にもどるパンチ攻撃のキー入力処理作成
引き続きBP_Playerでパンチ攻撃の処理を作っていく。今回はCキーでパンチが出るようにする。
Enhanced Inputでのキー入力についてわからない場合は先に以下の記事を確認してほしい。
Enhanced Inputでのキー入力コンテンツドロワーの任意の場所で右クリックし、入力→入力アクションのように選択してInput Actionファイルを作成する。
.jpg)
ファイルの名前はIA_Punchとする。ダブルクリックして開く。
以下のようにValue Typeの項目をDigital(bool)に変更する(恐らく既になっている)。Triggersを追加しておく(none)のままでOK。
.jpg)
続いて、IMC_Defaultを開く。ここにIA_punchを追加し、Cキーで動くようにする。

BP_Player(操作キャラのブループリント)を開く。
イベントグラフ上でIA_Punchを検索して出す。
.jpg)
以下のようにノードをつなげる。
.jpg)
Set VisibilityでWeaponのメッシュを非表示にしている(New Visibilityのチェックを外すと非表示)。殴っている時に銃があると不自然なので消している。
続いてAttackCollisionににRightPunchCollisionをセット。
AttackCollisionのセットに続ける形で以下のノードを配置する。
.jpg)
Play Anim Montageで先ほど作成したAM_Punching_UEを指定して再生できるようにする。
Return Valueからアニメーションモンタージュの長さが出力されるので、その間Delayで待ち、再びSet Visibilityのノードを配置しNew Visibilityにチェックを入れることで、パンチのアニメーションが終わったら再び銃を表示することができる。
RightPunchCollisionを選択し右クリックし、イベントを追加→On Component Begin Overlapのように選択。
.jpg)
以下のように以前作成したダメージ処理(インターフェース)の処理が行われるようにする。
.jpg)
コンポーネントタブでBP_Playerを選択し、デフォルトのATKを設定。今回は35とした。

インターフェース作成
ANS_AttacKにアニメーションモンタージュが再生されてアニメーション通知がきたときの処理を書く予定なのだが、そのアニメーションを行っているキャラをとってくるためにインターフェースの設定を行う。
以前の記事でダメージ処理を作るためにインターフェースのI_Characterを作成している。
このI_Characterを開き、新たに関数を追加し名前をGet BP Characterとする。

Get BP Characterを選択し、アウトプットを追加しBP Character(操作キャラ・敵の親クラス)の型で検索する。名前をBPcharacterとする。

コンパイルする。
BP_Characterを開き、インターフェースのGet BPcharacterを選択する。

以下のようにReturn Nodeの入力BPcharacterからワイヤーを伸ばし Selfと検索してGet a reference to selfを選択する。
.jpg)
以下のようにノードを設置できればOKだ。コンパイルする。
.jpg)
Animnotify作成
ANS_AttacKを開く。
オーバーライドを選択しReceived_NotifyBeginを選択して作成する(先ほどAM_Punching_UEにANS_Attackの範囲をセットしたが、その範囲の最初に呼び出される)。
.jpg)
同様にオーバーライドを選択しReceived_NotifyEndを選択して作成する(AM_Punching_UEのANS_Attackの範囲の最後に呼び出される)。
.jpg)
まずはReceived_NotifyBeginを選択し、以下のようにノードを設置する。
.jpg)
Received_NotifyBeginのMesh Compには現在アニメーションモンタージュを再生しているスケルタルメッシュが出力される。そこへGet Ownerをつなぐことでアクタを取得可能。
続けてGet BP Characterのインターフェースをつなげる。これでアニメーションを再生しているキャラが明らかになる。
そのキャラのAttack Collsionの変数にはアニメーションモンタージュ再生直前にRightPunchCollisionをセットしてある。それをターゲットにSet Collsion Enabledで「Collision Enabled」に設定(初期状態ではNo Collisionなのを変更)。
これで先ほど設定したRightPunchCollisionのOn Component Begin Overlapが動くようになる。
.jpg)
Received_NotifyBeginの内容をコピーしてReceived_NotifyEndに貼り付けよう。
そして、Set Collsion Enabledを「No Collision」に変更すればOK
.jpg)
アニメーションモンタージュのANS_Attackの範囲の最後なのでRightPunchCollisionのコリジョンを消し、On Component Begin Overlapが動かないようにしている。
これで以下のようにパンチ攻撃が行われ、敵に当たるとダメージ処理が行われ、HPが0になると倒れる。
次の記事では攻撃を当てて敵が吹き飛ばせるようにしていく。
⑨吹き飛ばし処理