TPSシューティングゲーム製作~狙った方向に弾を飛ばす~

今回は、

 

狙った方向に弾を飛ばす!

 

処理を解説します!

 

サードパーソンテンプレートを使います!

必要なもの!

・銃のアセット(マーケットプレイスの有料なものでもUE4公式のラーニングで用意されている奴でも何でもいいかも)

今回僕が使ったのはこれです!

f:id:Free_Gamer:20180603190541p:plain

 

サードパーソンキャラBPを開き、以下のものを用意します。

・弾丸のBP

・弾丸のエフェクト

・弾丸を飛ばすためのキャラBP

・銃

 

まず、弾丸のBPです。

親クラスがアクターのBPを作成し、名前を「BP_Bullet」にします。

そして、以下のように作成します。

f:id:Free_Gamer:20180603191153p:plain

Sphereコリジョンコリジョンプリセットは「BlockAll」にし、それ以外のスタティックメッシュは「NoCollision」にします。

f:id:Free_Gamer:20180603191759p:plain

上の画像の「Bullet」という名前を付けたスタティックメッシュはあってもなくてもいいです。(どうせ弾を飛ばすわけですしどうせエフェクトで目立たないし)

 

弾丸のエフェクトはこのようにしました。

f:id:Free_Gamer:20180603192143p:plain

Sphereを楕円形に引き伸ばして、オレンジ色のエミッシブカラーのマテリアルをつけたものです。

あと、このエフェクトは「CastShadow」のチェックを外してください。

f:id:Free_Gamer:20180603192500p:plain

あと、弾を飛ばすわけですから「ProjectileMovement」コンポーネントも忘れずに入れてくださいね。

f:id:Free_Gamer:20180603193434p:plain

飛ぶ速度は飛んでるか確認するために「5000」くらいにしましょう。重力の影響も受けないようにします。

 

エミッシブカラーのマテリアルは、以下のように作りましたよ。

f:id:Free_Gamer:20180603192618p:plain

 

次に、「BP_Bullet」のBPを組んでいきます。

f:id:Free_Gamer:20180603192954p:plain

Sphereコリジョンを「BlockAll」にしたのでイベントHitを使用します。

これは、

何かにHitしたら、HitLocation(ヒットした場所)で、エフェクトとサウンドを発生さえ、消滅する。

というものです。

これで、BP_Bulletのほうは終了です。

 

次に、キャラBPに行きます。

キャラはこちらを使用します。

f:id:Free_Gamer:20180603193747p:plain

このアセットは、無料なので誰でも使えます。

 

キャラBPで、以下の手順を行います。

 

武器をアタッチするためのソケット追加。

f:id:Free_Gamer:20180603194154p:plain

アニメーションの作成。

f:id:Free_Gamer:20180603194933p:plain

AimOffset Direction関数

f:id:Free_Gamer:20180603194954p:plain

ブレンド1D・ブレンドとAimOffsetの作成(すいません。AimOffsetの作り方はUE4公式が分かりやすく教えているのでそちらを参考にしてください。ググれば出てくるはずです)

Idle_Walk_Run(ブレンド1D)

f:id:Free_Gamer:20180603195709p:plain

Aim(ブレンド

f:id:Free_Gamer:20180603195741p:plain

ステートマシーンの作成

f:id:Free_Gamer:20180603195035p:plain

 Idle_Walk_Run

f:id:Free_Gamer:20180603195151p:plain

Aim

f:id:Free_Gamer:20180603200026p:plain

Idle_Walk_Run→Aim

f:id:Free_Gamer:20180603200047p:plain

Aim→Idle_Walk_Run

f:id:Free_Gamer:20180603200128p:plain

キャラBP

f:id:Free_Gamer:20180603201016p:plain

Linetrace関数

f:id:Free_Gamer:20180603200909p:plain

キャラのカメラ位置から前方5000の距離までライントレースを飛ばす

f:id:Free_Gamer:20180603201054p:plain

射撃ボタンを押して瞬間に、ライントレースを飛ばす。

もしトレースが何かに当たったら、当たった場所にBP_Bulletを飛ばす。(SelectVector「A」)

トレースが何も当たんなかったらトレースの最終位置までBP_Bulletを飛ばす。(SelectVector「B」)

f:id:Free_Gamer:20180603201109p:plain

BP_Bulletはキャラにアタッチした武器スケルタルメッシュの指定ソケット位置から出てくる。

f:id:Free_Gamer:20180603202315p:plain

BP_Bulletはライントレースを飛ばした方向を常に向くため、必ず狙った場所に弾が飛ぶ。(FindLookAtRotation)

ScaleはXYZ「0.1」で。

 

エフェクト処理

武器スケルタルメッシュの指定ソケットからエフェクト・サウンドを出す。

f:id:Free_Gamer:20180603201121p:plain

エイム処理

ボタン押したときに、カメラを向けた方向に常にキャラが向くようにし、SpringArmの長さと位置をキャラにグッと寄せる。

エイム中は移動速度を落とす。

f:id:Free_Gamer:20180603203309p:plain

AimCameraタイムライン

f:id:Free_Gamer:20180603203457p:plain

 

ここまでできたらプレイしてみましょう!

youtu.be

 

実際に弾が狙った方向に飛んでいるのが分かりますね!

ちなみに、Linetraceの件で「SelectVector」を使っていましたが、

f:id:Free_Gamer:20180603201109p:plain

僕は最初、これを使う意味が分からず、

「こんなん使わなくっても普通にImpactPointのみに弾を飛ばしゃあいいんじゃねーの??」

と思っていましたが、ちゃんと意味があります。

仮に、「SelectVector」を使わず、ImpactPointのみに弾が飛ぶようにしたらどうなるかというと。。。

f:id:Free_Gamer:20180603202819p:plain

youtu.be

おわかりいただけただろうか

障害物のあるほうには飛んでいくが、何もないところに向けて打つと変な方向に弾が飛んでいるのが分かると思います。

これは、BPからしたら、

「ライントレースがヒットした場所に向けて弾を飛ばせとは言われたけど、何もないところにヒットしたらどうするかは言われてねーからとりあえず適当にワールド座標のXにでもとんでいくかー☆」

みたいな感じだと思うので、まあ仕方ない現象ですね。

 

かなーーーーーーーりながくなってすいませんでした。

もしわかりづれえ!アホ!という方が多いようでしたら、

もしかしたら動画出すかもしれません。

まあ、その辺は臨機応変に。

 

それではまた!^^ノシ