プログラマーの卵の日記

備忘録になってます!小難しそうなことから超簡単なことまでやってます!!

【UE4】銃から弾を飛ばしたい

構成


No.1 補足
No.2 VRテンプレートでの持つ挙動
No.3 銃の銃口から弾を出すための銃側の準備
No.4 様々な挙動の弾を出す







        No.1 補足


 銃の玉については一度作りました。ですが、数か月経てばどういった形で作ったのか忘れるという懸念が出てきたので、完成形を見ながらどうやって作ったのかまとめます。
ちなみにこれはUnreal Engine 4.22.3で、VRのテンプレートを使用しています。画像で銃のモデルが出てきますが、そちらはSci Fi Weapons Silverというものです。作成者はYing Pei Gamesさんです。
銃と弾の挙動については自作です。


【UE4】銃の挙動を作ってみたかったから作った





        No.2 VRテンプレートでの持つ挙動


 VRテンプレートから手の挙動のブループリントは「VirtualRealityBP→Blueprints→BP_PickupCube」の中にあります。
もしかしたらその左のBP_MotionControllerじゃないのって思われそうですが、それは手の挙動であって持つ挙動は掴まれる側である「BP_PickupCube」にあります。
それで、持つ挙動はこれです。

f:id:yutateno:20191120002409p:plain


内容としては物体の物理演算を無くして、持った手にくっつくようにしています。

また、持つということは離すこともあると思います。その離したときの挙動はこれです。

f:id:yutateno:20191120002419p:plain


内容としては物体に物理演算を戻して、持った手から離れるようにしています。

また、補足ですが、ブループリントを見ればわかると思いますが、今回はブループリントインターフェースを利用されています。
そのブループリントインターフェースは同じ階層にある「PickupActorInterface」です。中身をこのような感じになっています。拾うと落とすを呼ぶようになっています。

f:id:yutateno:20191120002428p:plain


これから分かるように、VRでの手の方は何を掴んだのか把握してないです。ブループリントインターフェースを利用して、捕まれた側が捕まれた時にどういったことを行うかを制御しています。

ここまでである程度分かると思いますが、今回の銃というのは"掴まれる側"なのでブループリントインターフェースを利用して処理を行います。





        No.3 銃の銃口から弾を出すための銃側の準備


 ブループリントの作成…と言いたいのですがNo.1でも言った通り実装は出来ているのである程度端折ります。
では、銃を持たせるためにブループリントインターフェースからPickを利用したいと思います。

f:id:yutateno:20191120002439p:plain


今回は物理演算は使わないので元から設定せず、拾った後に銃を撃つということで持ったかどうかのフラッグを持たせたいので後ろでフラッグを立たすように付けています。

ちなみに手放す挙動は同様な感じです。

f:id:yutateno:20191120002453p:plain




では、銃を持っているときに弾を撃たせたいと思います。銃を撃たせる以上トリガーを押したいはずです。
今回はある程度楽したかったので既に配置されているトリガーではないトリガーを押して撃つようにさせます。正確にはVRコントローラーを持った時の中指の部分のトリガーです。
そのトリガーですが、プロジェクト設定からインプットにて作成をします。

f:id:yutateno:20191120002505p:plain


これによりブループリントに簡単に引っ張ってこれます。

では、銃を出す準備は整ったと思いきや、銃側にて弾を出すときいちいち銃口の場所を計算するのは手間です。
なので、銃口あたりに弾の代わりなるものを配置します。

f:id:yutateno:20191120002519p:plain


配置した後に、作成者は見えるがプレイヤーは見えないようにするには「Hidden in Game」にチェックを入れれば大丈夫です。今回はこのような感じにします。

そうしたらブループリントにて調整をします。

f:id:yutateno:20191120002531p:plain

 

f:id:yutateno:20191120002542p:plain


先ほどプロジェクト設定にて作成したものを用いて押し切りかかっていれば押しているとします。
そのあとは少し邪魔なものがあると思いますが、ガトリングは無視して、トリガーが押されれば弾を一発だけ生成するようにしています。





        No.4 様々な挙動の弾を出す


 銃の側から弾の生成が呼び出されました。
ですが、このままでは弾は特に何の挙動をしませんし、最悪、弾はずっとそこに居続けて消えることがありません。
そのため、まずは数秒経ったら消えるようにします。

f:id:yutateno:20191120002554p:plain


自身が生成されたと判断したら7秒後に消えるようにしています。

で、次に挙動についてですが、これは凄く簡単です。
このコンポーネントを呼べば単純な挙動は終わりです。

f:id:yutateno:20191120002605p:plain



実際のところ、このコンポーネントを調整すれば思い通りの弾の挙動はできると思います。
私も正直あいまいなまま弄って調整したので正解だとは思ってないのですが、少しだけ説明します。ここからはそのコンポーネントから表示される右側の詳細を見ながら説明します。

このVelocityにて弾の進む方向を決めます。例えば横とか上とか言ったらここを弄ってみてください。

f:id:yutateno:20191120002616p:plain



この数値を弄れば、重力の調整を出来ます。0.0ならまっすぐ進みますし、それ以上なら真下に落ちます。

f:id:yutateno:20191120002628p:plain



これについては少しあいまいですが、ホーミングというものを出来ます。
カーソルを合わせれば言われている通り、スポーン(生成後)に設定しなければなりません。設定は変数と同じように左からドラッグアンドドロップすればブループリントに持って来れるのでここで調整させます。

f:id:yutateno:20191120002636p:plain

 

f:id:yutateno:20191120002649p:plain



あと弾を撃ちながら回転させるものを作ったのですがこれは不完全でした。不完全というのは私の技術不足です。一応載せます。これはコンポーネントは特に関係ないです。三角関数関係です。

f:id:yutateno:20191120002656p:plain