血の作成~地面や壁に血をつける方法~
今回はこちらのアセットを使用して
血のデカールを地面や壁につける処理を紹介します。
確かそこまで高くなかったような気がするので(500円ぐらいだったかな)
1000円あれば余裕で買えると思います。
このアセットは、地面用と壁用の血のデカールが入ってるので
グロ表現にこだわりたい僕からしたら、お気に入りのアセットです^^
~血の作成~
血のデカール用のアクター「BP_BloodDecal」を作成します。
コンポーネントは以下の通り。
DecalのXの角度を「90」にします。
デカールのXのサイズを、「5」にします。
配列変数「BloodDecal」からランダムで、デカールをセットします。
「BP_BloodDecal」の子クラスを作成します。
・「BP_FloorBlood」(地面用の血のデカール)
・「BP_WallBlood」(壁用の血のデカール)
この2つのBPを開き、配列変数「BloodDecal」にデカールをセットします。
「BP_FloorBlood」
「BP_WallBlood」
血の作成はこれで以上です。
~トレースチャンネルの作成~
プロジェクト設定のコリジョン設定で
「Trace」というTraceChannelを作成します。
「Trace」のデフォルト応答は「Block」にします。
~コリジョンの編集~
Preset項目内の、「Pawn」と「CharacterMesh」のプロファイルを編集します。
「Pawn」の「Trace」応答を「無視する」に設定。
「CharacterMesh」の「Trace」応答を「ブロック」に設定。
コリジョンの編集は以上です。
~ダメージを与える側の作成~
「ThirdPersonCharacter」を開き、FPS視点にしたいので
SpringArmの位置を頭に持っていき、SpringArmの長さを「0」にしています。
Meshは、HiddenInGameをTrueにして非表示にしてあります。
カメラの位置から、前方に向けて「5000」の距離に飛ばしています。
トレースが当たったものにダメージを与えるといった感じです。
トレースのTraceChannelは「Trace」という自作TraceChannelにしてあります。
ちなみに、「ApplyPointDamage」のBaseDamageが「0」だった場合
ダメージを受ける側が持っているイベント「PointDamage」が呼び出されません。
なので、イベント「PointDamage」を呼び出したい場合は
「ApplyPointDamage」のBaseDamageには「0」以上の値を入れましょう。
~ダメージを受ける側の作成~
ダメージを受ける側のキャラ「BP_Enemy」を作成。
イベントグラフは以下の通り。
ダメージを受けた時、HitLocationとHitNormalの値を格納。
後に血のデカールをスポーンさせるイベントを呼び出す。
地面に血のデカールをスポーンさせる処理です。
ダメージを受けたキャラの足元に
自作関数「FindSpawnDecalPoint」で足元にトレースを飛ばし
地面を検知したら血のデカールをスポーンさせるという感じです。
変数「Z_TraceLength」の値は「150」にしてあります。
「FindSpawnDecalPoint」関数の中身は以下の通り。
壁に血のデカールをスポーンさせる処理です。
「FindSpawnDecalPoint」関数でトレースを飛ばし、壁を検知します。
変数「TraceLength」の値は「500」にしてあります。
自作純粋関数「SetVectorVariation」で、血のデカールをスポーンさせる位置に
ばらつきを持たせます。
変数「Min」の値は「‐90」、変数「Max」の値は「90」にしてあります。
「SetVectorVariation」純粋関数の中身は以下の通り。
トレースがヒットした際、ヒットしたオブジェクトの角度が
指定した角度よりも大きい場合は、血のデカールをスポーンさせます。
画像で言うと、トレースがヒットしたオブジェクトの角度が
「40度」以上だった場合に、血のデカールをスポーンさせる
といった感じです。
実際にプレイしてみましょう。
動画のようにできていればOKです。
最近、ゲームは血が出てりゃあ
何でも面白いんじゃないかと思い始めてます。
それではまた^^ノシ