【UE4】攻撃判定の実装

2019年3月3日

アニメーションモンタージュによる連続攻撃の実装を以前行ったので、今回は攻撃判定を実装し敵を攻撃できるようにしてみたいと思います。

 

※画像はクリックで拡大できます

 

スポンサーリンク

攻撃判定用コリジョンの追加

 

攻撃判定用にBoxコリジョンをキャラクタークラスに追加します。このBoxコリジョンが敵キャラのコリジョンにオーバーライドした時にHitイベント発生させます。

キャラクタークラスのコンポーネントに攻撃判定用コリジョン追加

 

今回使用しているキャラクターが両手にそれぞれ武器を持っているので、とりあえずその近くに配置しておきます。後でブループリントによる制御で座標をセットするので仮で置きます。

攻撃判定用ボックスコリジョンの配置

 

キャラクターのスケルトンにソケットを追加

 

キャラクターのスケルトンをダブルクリックしてスケルトン編集画面を開き、スケルトンツリーを確認します。

今回使用するキャラクターは左右の武器用ボーンが既に含まれている状態でしたので、そのボーンを右クリックして「ソケットを追加」を選択してソケットを追加します。

武器が含まれていない場合は、手のボーンにソケットを追加して武器のメッシュをソケットにアタッチする事で武器を持たせる事ができます。

今回は武器のボーンに攻撃判定コリジョンを設置するための座標取得を目的に、ソケットを追加しています。

キャラクターのボーンにソケットを追加

 

ブループリントでソケットの座標を攻撃判定用コリジョンにセット

 

キャラクタークラスのブループリントで先程追加したソケットのワールド座標を、攻撃判定用コリジョンの座標にセットします。

ソケットの座標取得とコリジョンの座標セット

 

これで攻撃アニメーションに攻撃判定用コリジョンが追従するようになりました。

 

アニメーション通知による攻撃判定コリジョンの制御

 

キャラクターの攻撃アニメーションを制御しているアニメーションモンタージュの通知に、攻撃判定コリジョンの有効、無効を設定する通知を設定します。

この通知が来た時に、攻撃判定コリジョンの有効、無効を切り替える事で特定のタイミングで当たり判定を行う事ができます。

アニメーションの通知を追加

 

キャラクターのアニメーションBPに通知を受けた際の処理を実装します。

キャラクターのアニメーションBPに通知を受けた時の処理

 

アニメーションBPで呼び出している「Set Attack Collision R」と 「Set Attack Collision L」は、キャラクタークラスの方で実装している各コリジョンコンポーネントに「Set Collision Enabled」する関数です。

右武器用の攻撃判定切り替え、左もコンポーネントをL_BoxCollisionにしただけで全く一緒。

 

攻撃を受ける敵側の処理

 

敵のキャラクタークラスのブループリントに、プレイヤーキャラの攻撃判定コリジョンが重なった時の処理を記載します。

敵のキャラクタークラスでOn Component Begin Overlapによる当たり判定処理をする

 

On Component Begin Overlapによって、重なったコリジョンコンポーネントを取得して「Component Has Tag」で重なったコンポーネントを判別しています。

攻撃を行うプレイヤーキャラのキャラクタークラスから 「Set Attack Collision R」と 「Set Attack Collision L」を呼び出し、攻撃がヒットした段階で攻撃判定用コリジョンを無効にしています。 これで多段にヒットする事を防いでいます。

敵キャラの状態を「Hit」状態にし、イベントディスパッチャー「HitDispatcher」を作成し呼び出す事で、アニメーションBP側で HitDispatcherにバインドしたカスタムイベントで攻撃Hit時のアニメーションを再生させます。

 

攻撃判定用コリジョンコンポーネントにTagをセット

 

「Component Has Tag」で攻撃判定用コリジョンである事を判別するため、プレイヤーのキャラクタークラスに用意したボックスコリジョン「R_WBoxCollision」と「L_WBoxCollision」にタグを設定しています。

攻撃判定用ボックスコリジョンにタグをセット

 

攻撃Hit時のアニメーション

 

敵キャラのキャラクタークラスで攻撃ヒット時、イベントディスパッチャー「HitDispatcher」を作成し呼び出しているので、アニメーションBPでHitDispatcherにカスタムイベント「HitEvent」を作成しバインドします。バインドは初期化時に一回行えば大丈夫のようです。

カスタムイベント「HitEvent」のバインド

 

カスタムイベント「HitEvent」ではスロットアニメーションの再生を行っています。以前アニメーションモンタージュを再生しましたが、それの単品版といった感じです。

「Play Slot Animation」で指定のアニメーションを再生、アニムグラフで呼び出すのに必要なスロットノード名を設定します。

「AnimNotify_Enemy1HitEnd」は攻撃Hit時アニメのアニメーション終了を知らせる通知イベントです。この通知が来たら「Stop Slot Animation」でスロットアニメーションの再生を終了します。

スロットアニメーションの再生と停止

 

アニムグラフの方で、「Play Slot Animation」で指定したノード名のスロットアニメーションを呼び出します。

アニムグラフでのスロットアニメーション呼び出し

 

攻撃してみる

 

攻撃する側とされる側の準備ができたので、早速攻撃してみます。

攻撃!!

 

ちゃんと攻撃アニメーションに合わせて、攻撃がHitするよう実装できました!!

スポンサーリンク