プレイヤー、敵、またはオブジェクトに何らかのダメージを与えるゲームを作成していると、何かにヒットしたかどうか、ヒットした場合はどのプレイヤーがヒットしたか、インパクト ポイントの場所、または検出されたヒットに関するその他の情報を特定しなければならない状況が頻繁に発生します。OnHit イベントは、コリジョンが発生した際にこれらの情報やその他多くの情報を提供します。提供されるデータを使用して、ヘルスに影響を及ぼしたり、オブジェクトを破壊したり、その他のゲームプレイ関連のアクションを実行することができます。
実装ガイド
このガイドでは、OnComponentHit と Event Hit イベント を使用して、被破壊メッシュにダメージを与えて破壊したり、ヒットした箇所に衝撃を与えて被破壊物を押したり、弾丸がヒットした効果をシミュレートしたり、ヒットした場所に力を加えたりします。
手順
この操作ガイドでは スターター コンテンツ を有効にした状態で ブループリントの「ファースト パーソン」テンプレート を使用します。
プロジェクトの コンテンツ ブラウザ で「Content/Geometry/Meshes」フォルダに移動します。
1M_Cube スタティック メッシュを 右クリック し、[Create Destructible Mesh (被破壊メッシュの作成)] を選択します。
このスタティック メッシュから被破壊メッシュを作成することで、被弾時にメッシュを破壊して、粉砕させることができます。
被破壊メッシュ エディタ内で、[Fracture Mesh (メッシュを破砕)] ボタンをクリックし、[Save (保存)] してウィンドウを閉じます。
新しく作成した被破壊メッシュ アセットを 右クリック し、[Asset Actions (アセット アクション)] で、[Create Blueprint Using This... (これを使用してブループリントを作成する…)] を選択します。
必ず、新規に作成されたブループリントの保存場所と名前を選択してください。
新しいブループリントのブループリント エディタの [Components (コンポーネント)] ウィンドウで Destructible コンポーネントを選択します。
I[Details (詳細)] パネルの [Physics (物理)] にある [Simulate Physics (物理シミュレーション)] チェックボックスをオンにします。
この設定により、このブループリントで物理シミュレーションが実行されます。
また、[Details] パネルの下側にある [Events (イベント)] で OnComponentHit イベントをクリックします。
これで、新しいノードが追加され、[Event Graph (イベント グラフ)] が表示されます。
Other Actor ピンを クリック してドラッグし、Cast To FirstPersonProjectile ノードを検索して追加します。
この キャスティング では、FirstPersonProjectile ブループリントという別のブループリントにキャストし、被破壊メッシュにヒットしたときに、実際に FirstPersonProjectile ブループリントが確実にその被破壊メッシュにヒットするようにします。ヒットした場合、メッシュを破壊する追加のスクリプトを適用して、メッシュを粉砕することができます。ヒットしなかった場合は、何も行いません。
Hit ピンからドラッグして、Break Hit Result ノードを追加します。
Break Hit Result ノードにより、ヒット結果およびその情報に関するあらゆる種類の情報にアクセスできます。
Break Hit Result から Hit Actor ピンをドラッグして、Apply Point Damage ノードを追加します。
Apply Point Damage ノードで、Base Damage を「100」に設定し、Damage Type Class を Damage Type に設定します。
Apply Point Damage ノードでは、与えるダメージの大きさだけでなく、ダメージを与える位置も指定することができます。
Apply Point Damage ノードで、次のようにその他のワイヤーを接続します。
すべてのワイヤーを接続したら、このようなグラフになります。
ブループリントを コンパイル して 保存 してから閉じます。
ブループリントを コンテンツ ブラウザ からレベルにドラッグします。
[Play (プレイ)] をクリックしてエディタで再生し、マウスの左 ボタンを使用してキューブに弾丸を発射します。
エディタでプレイしているときに、発射された弾丸がキューブにヒットすると、キューブがダメージを受け、破壊されるとともに、ヒットした箇所に衝撃が加わり、衝撃が加わった方向に飛んでいくことがわかります。適用される力の大きさは、FirstPersonProjectile ブループリントで定義されます。このブループリントでは、Event Hit ノードを使用して、弾丸が実際に何かにヒットするタイミングを決定します。
「Content/FirstPersonBP/Blueprints」フォルダで、FirstPersonProjectile ブループリントを開きます。
クリックして画像を拡大。
このブループリントのスクリプトでは、ヒットしたオブジェクトが物理シミュレーションを実行しているかどうかを確認します (キューブ ブループリントでは true に設定されている)。物理シミュレーションを実行している場合は、ヒットした箇所に衝撃を加えます (衝撃の大きさは緑色の四角で囲んだ部分で定義される。ここでは「50」に下げている)。この値を調整することで、ヒットしたときに加えられる衝撃の大きさを増減させることができます。