UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 銃の弾が壁などに衝突した際の弾痕を実装する

現実の世界では銃弾が壁に当たると

ちょっと削れますよね?

 

今回はその弾痕の処理を実装します。

 

参考にしたサイトはこちら

gametukurikata.com

 

ベクトルの計算を使用していますが、

こちらのサイトに詳しく解説されています。

qiita.com

 

ではやっていきます。

 

準備

UE4 4.13.3を使用します。

f:id:MozPaca:20170128012413p:plain

 

FPSテンプレートでプロジェクトを作成してください。

f:id:MozPaca:20170128012508p:plain

 

使用する弾痕のテクスチャを用意します。

f:id:MozPaca:20170128073105p:plain

※256x256の.pngです。

 

テクスチャを用意したら、

プロジェクトにインポートしてください。

f:id:MozPaca:20170128073405p:plain

(鮮やかだなぁ...もっと暗い色にすればよかった)

 

必要なものを揃える

読み込んだテクスチャを右クリックします。

Sprite Actions→Create Spriteを選択してください。

f:id:MozPaca:20170128073505p:plain

 

Spriteが作成されます。

f:id:MozPaca:20170128073629p:plain

 

次に弾痕用のブループリントを作成します。

コンテンツブラウザを右クリック→Blueprint Classを選択します。

f:id:MozPaca:20170128073809p:plain

 

親クラスはActorを選択します。

f:id:MozPaca:20170128073916p:plain

 

作成したブループリントを開いてください。

f:id:MozPaca:20170128074001p:plain

 

まずはコンポーネントを追加します。

左上の方にあるAdd Componentから

Paper Spriteを追加してください。

f:id:MozPaca:20170128074137p:plain

(Spriteと入力して出てくる下の方です)

 

追加したPaper Spriteを選択し、

パラメータを変更していきます。

Source Spriteに先ほどインポートしたテクスチャを入れます。

f:id:MozPaca:20170128074322p:plain

 

少しテクスチャが大きいので、Scaleを0.1にします。

RotationのZ軸を90にします。

f:id:MozPaca:20170128074444p:plain

 

弾痕自体にはCollisionも不要なので

Block AllからNo Collisionに変更しておきます。

f:id:MozPaca:20170128074458p:plain

 

これで必要なものは揃いました。

 

処理を書く

まずは角度が取れているかを確認します。

FPSテンプレートに入っている

First Person Projectileを開いてください。

f:id:MozPaca:20170128074839p:plain

 

弾の衝突座標から衝突面に垂直な

長さ90のLine Traceを出します。

f:id:MozPaca:20170128074948p:plain

※確認用の処理です。弾痕を描画するだけなら、この処理は必要ありません。

 

このように衝突した平面から垂直なLine Traceが

確認できると思います。

www.youtube.com

 

次に描画するための処理を書いていきます。

先ほどのLine Traceの処理は削除しています。

f:id:MozPaca:20170128075441p:plain

Hit Locationから単に弾痕のブループリントを生成するだけでは、

オブジェクトにテクスチャが埋まってしまいます。

そこで、Hit Locationからカメラの向きベクトルを引くことで

少しだけ手前に生成しています。

 

RotationはLine Traceの処理で実装したVectorの処理を

Rotationで扱っているだけです。

 

これで一応描画はできるのですが、

弾痕がいつまでも残ってしまうので、

最後にBP_BreakEffectに処理を追加します。

f:id:MozPaca:20170128074001p:plain

 

これだけです。

生成されて5秒後に消える処理です。

f:id:MozPaca:20170128080007p:plain

 

以上で処理は終了です。

 

確認してみる

どの角度でも衝突相手の平面に張り付いて見えると思います。

www.youtube.com

 

※Spriteを少しいじったので

 上記の画像より暗く見えるのはそのためです。

 

余談

銃を連射しているのは前回のブログと

同じプロジェクトを使用しているからです。

参考までにどうぞ。

mozpaca.hatenablog.com