血の作成~地面や壁に血をつける方法~

今回はこちらのアセットを使用して

f:id:Free_Gamer:20210223184428p:plain

血のデカールを地面や壁につける処理を紹介します。

 

確かそこまで高くなかったような気がするので(500円ぐらいだったかな)

1000円あれば余裕で買えると思います。

 

このアセットは、地面用と壁用の血のデカールが入ってるので

グロ表現にこだわりたい僕からしたら、お気に入りのアセットです^^

 

 

~血の作成~

血のデカール用のアクター「BP_BloodDecal」を作成します。

f:id:Free_Gamer:20210223172646p:plain

 

コンポーネントは以下の通り。

f:id:Free_Gamer:20210223173455p:plain

 

DecalのXの角度を「90」にします。

f:id:Free_Gamer:20210223173542p:plain

 

デカールのXのサイズを、「5」にします。

f:id:Free_Gamer:20210223173626p:plain

 

コンストラクションスクリプトに、以下の処理を作成します。

配列変数「BloodDecal」からランダムで、デカールをセットします。

f:id:Free_Gamer:20210223172842p:plain

 

「BP_BloodDecal」の子クラスを作成します。

・「BP_FloorBlood」(地面用の血のデカール

・「BP_WallBlood」(壁用の血のデカール

f:id:Free_Gamer:20210223173007p:plain

 

この2つのBPを開き、配列変数「BloodDecal」にデカールをセットします。

 

「BP_FloorBlood」

f:id:Free_Gamer:20210223185420p:plain

 

「BP_WallBlood」

f:id:Free_Gamer:20210223185448p:plain

 

血の作成はこれで以上です。

 

 

~トレースチャンネルの作成~

プロジェクト設定のコリジョン設定で

「Trace」というTraceChannelを作成します。

f:id:Free_Gamer:20210223174901p:plain

 

「Trace」のデフォルト応答は「Block」にします。

f:id:Free_Gamer:20210223175012p:plain

 

 

コリジョンの編集~

Preset項目内の、「Pawn」と「CharacterMesh」のプロファイルを編集します。

f:id:Free_Gamer:20210223175234p:plain

 

「Pawn」の「Trace」応答を「無視する」に設定。

f:id:Free_Gamer:20210223175057p:plain

 

「CharacterMesh」の「Trace」応答を「ブロック」に設定。

f:id:Free_Gamer:20210223175401p:plain

 

コリジョンの編集は以上です。

 

 

~ダメージを与える側の作成~

「ThirdPersonCharacter」を開き、FPS視点にしたいので

SpringArmの位置を頭に持っていき、SpringArmの長さを「0」にしています。

Meshは、HiddenInGameをTrueにして非表示にしてあります。

f:id:Free_Gamer:20210223174320p:plain

 

カメラの位置から、前方に向けて「5000」の距離に飛ばしています。

トレースが当たったものにダメージを与えるといった感じです。

トレースのTraceChannelは「Trace」という自作TraceChannelにしてあります。

f:id:Free_Gamer:20210223174653p:plain

 

ちなみに、「ApplyPointDamage」のBaseDamageが「0」だった場合

ダメージを受ける側が持っているイベント「PointDamage」が呼び出されません。

なので、イベント「PointDamage」を呼び出したい場合は

「ApplyPointDamage」のBaseDamageには「0」以上の値を入れましょう。

 

 

~ダメージを受ける側の作成~

ダメージを受ける側のキャラ「BP_Enemy」を作成。

f:id:Free_Gamer:20210223164831p:plain

イベントグラフは以下の通り。

f:id:Free_Gamer:20210223182242p:plain


ダメージを受けた時、HitLocationとHitNormalの値を格納。

後に血のデカールをスポーンさせるイベントを呼び出す。

f:id:Free_Gamer:20210223171031p:plain

 

地面に血のデカールをスポーンさせる処理です。

ダメージを受けたキャラの足元に

自作関数「FindSpawnDecalPoint」で足元にトレースを飛ばし

地面を検知したら血のデカールをスポーンさせるという感じです。

変数「Z_TraceLength」の値は「150」にしてあります。

f:id:Free_Gamer:20210223182304p:plain


「FindSpawnDecalPoint」関数の中身は以下の通り。

f:id:Free_Gamer:20210223182325p:plain


壁に血のデカールをスポーンさせる処理です。

f:id:Free_Gamer:20210223182345p:plain


「FindSpawnDecalPoint」関数でトレースを飛ばし、壁を検知します。

変数「TraceLength」の値は「500」にしてあります。

自作純粋関数「SetVectorVariation」で、血のデカールをスポーンさせる位置に

ばらつきを持たせます。

変数「Min」の値は「‐90」、変数「Max」の値は「90」にしてあります。

f:id:Free_Gamer:20210223182509p:plain


「SetVectorVariation」純粋関数の中身は以下の通り。

f:id:Free_Gamer:20210223172325p:plain

 

トレースがヒットした際、ヒットしたオブジェクトの角度が

指定した角度よりも大きい場合は、血のデカールをスポーンさせます。

画像で言うと、トレースがヒットしたオブジェクトの角度が

「40度」以上だった場合に、血のデカールをスポーンさせる

といった感じです。

f:id:Free_Gamer:20210223182625p:plain



実際にプレイしてみましょう。

youtu.be

 

動画のようにできていればOKです。

 

最近、ゲームは血が出てりゃあ

何でも面白いんじゃないかと思い始めてます。

 

それではまた^^ノシ