TPSシューティングゲーム製作~狙った方向に弾を飛ばす~
今回は、
狙った方向に弾を飛ばす!
処理を解説します!
サードパーソンテンプレートを使います!
必要なもの!
・銃のアセット(マーケットプレイスの有料なものでもUE4公式のラーニングで用意されている奴でも何でもいいかも)
今回僕が使ったのはこれです!
サードパーソンキャラBPを開き、以下のものを用意します。
・弾丸のBP
・弾丸のエフェクト
・弾丸を飛ばすためのキャラBP
・銃
まず、弾丸のBPです。
親クラスがアクターのBPを作成し、名前を「BP_Bullet」にします。
そして、以下のように作成します。
Sphereコリジョンのコリジョンプリセットは「BlockAll」にし、それ以外のスタティックメッシュは「NoCollision」にします。
上の画像の「Bullet」という名前を付けたスタティックメッシュはあってもなくてもいいです。(どうせ弾を飛ばすわけですしどうせエフェクトで目立たないし)
弾丸のエフェクトはこのようにしました。
Sphereを楕円形に引き伸ばして、オレンジ色のエミッシブカラーのマテリアルをつけたものです。
あと、このエフェクトは「CastShadow」のチェックを外してください。
あと、弾を飛ばすわけですから「ProjectileMovement」コンポーネントも忘れずに入れてくださいね。
飛ぶ速度は飛んでるか確認するために「5000」くらいにしましょう。重力の影響も受けないようにします。
エミッシブカラーのマテリアルは、以下のように作りましたよ。
次に、「BP_Bullet」のBPを組んでいきます。
Sphereコリジョンを「BlockAll」にしたのでイベントHitを使用します。
これは、
何かにHitしたら、HitLocation(ヒットした場所)で、エフェクトとサウンドを発生さえ、消滅する。
というものです。
これで、BP_Bulletのほうは終了です。
次に、キャラBPに行きます。
キャラはこちらを使用します。
このアセットは、無料なので誰でも使えます。
キャラBPで、以下の手順を行います。
武器をアタッチするためのソケット追加。
アニメーションの作成。
AimOffset Direction関数
ブレンド1D・ブレンドとAimOffsetの作成(すいません。AimOffsetの作り方はUE4公式が分かりやすく教えているのでそちらを参考にしてください。ググれば出てくるはずです)
Idle_Walk_Run(ブレンド1D)
Aim(ブレンド)
ステートマシーンの作成
Idle_Walk_Run
Aim
Idle_Walk_Run→Aim
Aim→Idle_Walk_Run
キャラBP
Linetrace関数
キャラのカメラ位置から前方5000の距離までライントレースを飛ばす
射撃ボタンを押して瞬間に、ライントレースを飛ばす。
もしトレースが何かに当たったら、当たった場所にBP_Bulletを飛ばす。(SelectVector「A」)
トレースが何も当たんなかったらトレースの最終位置までBP_Bulletを飛ばす。(SelectVector「B」)
BP_Bulletはキャラにアタッチした武器スケルタルメッシュの指定ソケット位置から出てくる。
BP_Bulletはライントレースを飛ばした方向を常に向くため、必ず狙った場所に弾が飛ぶ。(FindLookAtRotation)
ScaleはXYZ「0.1」で。
エフェクト処理
武器スケルタルメッシュの指定ソケットからエフェクト・サウンドを出す。
エイム処理
ボタン押したときに、カメラを向けた方向に常にキャラが向くようにし、SpringArmの長さと位置をキャラにグッと寄せる。
エイム中は移動速度を落とす。
AimCameraタイムライン
ここまでできたらプレイしてみましょう!
実際に弾が狙った方向に飛んでいるのが分かりますね!
ちなみに、Linetraceの件で「SelectVector」を使っていましたが、
僕は最初、これを使う意味が分からず、
「こんなん使わなくっても普通にImpactPointのみに弾を飛ばしゃあいいんじゃねーの??」
と思っていましたが、ちゃんと意味があります。
仮に、「SelectVector」を使わず、ImpactPointのみに弾が飛ぶようにしたらどうなるかというと。。。
おわかりいただけただろうか
障害物のあるほうには飛んでいくが、何もないところに向けて打つと変な方向に弾が飛んでいるのが分かると思います。
これは、BPからしたら、
「ライントレースがヒットした場所に向けて弾を飛ばせとは言われたけど、何もないところにヒットしたらどうするかは言われてねーからとりあえず適当にワールド座標のXにでもとんでいくかー☆」
みたいな感じだと思うので、まあ仕方ない現象ですね。
かなーーーーーーーりながくなってすいませんでした。
もしわかりづれえ!アホ!という方が多いようでしたら、
もしかしたら動画出すかもしれません。
まあ、その辺は臨機応変に。
それではまた!^^ノシ