UE4 銃の弾が壁などに衝突した際の弾痕を実装する
現実の世界では銃弾が壁に当たると
ちょっと削れますよね?
今回はその弾痕の処理を実装します。
参考にしたサイトはこちら
ベクトルの計算を使用していますが、
こちらのサイトに詳しく解説されています。
ではやっていきます。
準備
UE4 4.13.3を使用します。
FPSテンプレートでプロジェクトを作成してください。
使用する弾痕のテクスチャを用意します。
※256x256の.pngです。
テクスチャを用意したら、
プロジェクトにインポートしてください。
(鮮やかだなぁ...もっと暗い色にすればよかった)
必要なものを揃える
読み込んだテクスチャを右クリックします。
Sprite Actions→Create Spriteを選択してください。
Spriteが作成されます。
次に弾痕用のブループリントを作成します。
コンテンツブラウザを右クリック→Blueprint Classを選択します。
親クラスはActorを選択します。
作成したブループリントを開いてください。
まずはコンポーネントを追加します。
左上の方にあるAdd Componentから
Paper Spriteを追加してください。
(Spriteと入力して出てくる下の方です)
追加したPaper Spriteを選択し、
パラメータを変更していきます。
Source Spriteに先ほどインポートしたテクスチャを入れます。
少しテクスチャが大きいので、Scaleを0.1にします。
RotationのZ軸を90にします。
弾痕自体にはCollisionも不要なので
Block AllからNo Collisionに変更しておきます。
これで必要なものは揃いました。
処理を書く
まずは角度が取れているかを確認します。
FPSテンプレートに入っている
First Person Projectileを開いてください。
弾の衝突座標から衝突面に垂直な
長さ90のLine Traceを出します。
※確認用の処理です。弾痕を描画するだけなら、この処理は必要ありません。
このように衝突した平面から垂直なLine Traceが
確認できると思います。
次に描画するための処理を書いていきます。
先ほどのLine Traceの処理は削除しています。
Hit Locationから単に弾痕のブループリントを生成するだけでは、
オブジェクトにテクスチャが埋まってしまいます。
そこで、Hit Locationからカメラの向きベクトルを引くことで
少しだけ手前に生成しています。
RotationはLine Traceの処理で実装したVectorの処理を
Rotationで扱っているだけです。
これで一応描画はできるのですが、
弾痕がいつまでも残ってしまうので、
最後にBP_BreakEffectに処理を追加します。
これだけです。
生成されて5秒後に消える処理です。
以上で処理は終了です。
確認してみる
どの角度でも衝突相手の平面に張り付いて見えると思います。
※Spriteを少しいじったので
上記の画像より暗く見えるのはそのためです。
余談
銃を連射しているのは前回のブログと
同じプロジェクトを使用しているからです。
参考までにどうぞ。