ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】 ⑮プレイヤーを狙う大砲を作ろう=弾道予測線のカスタマイズ=

目次

 

はじめに

注意

UE5Preview2の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

 

流れ

・Splineコンポーネントのスプラインポイントを弾道予測生成の配列から生成します。

・スプラインポイントを元にSplineMeshコンポーネントを動的に生成し、それぞれの始まりと終わりを設定します。

・SplineMeshコンポーネントを配列にキャッシュして削除+スプラインポイントをクリアします。

解説

①Splineコンポーネントの追加

BP_Cannonを開きます。

弾道予測は曲線を描くため紐などを表現するSplineコンポーネントを追加します。

f:id:namiton:20220316113156p:plain

値はそのままにしておきます。

f:id:namiton:20220316113243p:plain

 

②配列の変数化

弾道予測生成ノードの後にシーケンスノードを追加します。

f:id:namiton:20220316114244p:plain

また、配列にアクセスしやすいように変数を作成します。

f:id:namiton:20220316114339p:plain

ベクター型の配列を変数化しました。

f:id:namiton:20220316114437p:plain

 

配列とは

配列とは型の集まりです。

集合住宅の部屋番号のように大量の値が0番から順に格納されていきます。

画像の例だと集合住宅の部屋番号1番の値を取得しています。

f:id:namiton:20220316114623p:plain

また、Lengthを使うといくつ部屋があるか分かります。

f:id:namiton:20220316120626p:plain

 

③スプラインポイントを弾道予測生成の配列から生成

シーケンスノードからForEachLoopに接続します。

f:id:namiton:20220316120949p:plain

配列の数だけSplinePointを作成して設定します。

f:id:namiton:20220316121149p:plain

 

④SplineMeshの動的生成

次にスプラインポイントの数からいくつか引いた数回数分ループさせます。

これにより予測線の末端が決定します。

f:id:namiton:20220316121546p:plain

Indexは変数化しておきましょう。

f:id:namiton:20220316121931p:plain

 

ForLoop

オーソドックスな繰り返しノード

FirstIndex+1しながらLastIndexになるまでLoopBodyに信号を出力します。

f:id:namiton:20220316121720p:plain

 

SplineMeshコンポーネントを動的に追加します。

またそのスケールを設定できるようにします。

f:id:namiton:20220316122112p:plain

SplineMeshコンポーネントはSplineに沿って任意のメッシュを生成します。

StaticMeshにCylinderを登録しましょう。

またコリジョンプリセットはNoCollisionにしておきます。

f:id:namiton:20220316122404p:plain

 

⑤SplineMeshコンポーネントの配列化と追加

スプラインメッシュは弾道予測が更新されるたびに削除する必要があります。

そのため生成する段階で、参照を配列に登録する必要があります。

SplineMeshコンポーネントの配列を作成し登録してみましょう。

まずは変数へ昇格を押します。名前をSplineMeshsにしておきます。

f:id:namiton:20220316122739p:plain

変数の詳細からブロックアイコンを押して配列に変更します。

f:id:namiton:20220316122930p:plain

変更を押します。

これでSplineMeshComponentを格納できる配列が作成できました。

f:id:namiton:20220316122959p:plain

配置していたノードが配列に変わったことでエラーになっています。削除しましょう。

f:id:namiton:20220316123102p:plain

配列に値を格納するにはAddを行います。

f:id:namiton:20220316123320p:plain

ピンを繋げると配列に追加されます。

f:id:namiton:20220316123355p:plain

 

⑥生成したスプラインメッシュの位置調整

スプラインメッシュはPathPositionsの配列を元に生成されています。

そのためPathPositionsの値を取得することで生成したスプラインメッシュの位置を確定させることができるはずです。

 

メッシュの始まりと終わりを指定するノードSetStartandEndを追加します。

f:id:namiton:20220316123518p:plain

一見複雑そうですがやっていることはシンプルです。

SplinePointIndexを元に Path Positionsの座標を取得しているだけです。

TangentatSplinePointはスプラインポイントを生成したときに発生する補完骨の位置ベクトルです。これを正しく設定しないと回転に謎のうねりが発生するので気を付けてください。

f:id:namiton:20220316124120p:plain

スケールを変数化しておきましょう。

予測線の太さを変更できます。

f:id:namiton:20220316130108p:plain

変数の公開も行っておきましょう。

f:id:namiton:20220316130139p:plain

 

⑦スプラインメッシュとスプラインポイントの更新

このまま実行すると毎フレーム配列に追加しメッシュを生成し続けるのでゲームが落ちます。

予測線を生成する前に過去の情報をクリアしてしておきましょう。

f:id:namiton:20220316125623p:plain

 

DestroyComponent

ターゲットに入力されたコンポーネントを削除する。

f:id:namiton:20220316125711p:plain

 

Clear

任意の配列の中身を丸ごと削除する。

f:id:namiton:20220316125759p:plain

 

生成する前に配置します。

f:id:namiton:20220316125902p:plain

 

コンパイルして実行してみましょう。

予測ポイントに沿ってメッシュが描画されているはずです。

f:id:namiton:20220316130405p:plain

Start ScaleとEnd Scaleをいじると形状が変化します。

いろいろ調整してみましょう。

f:id:namiton:20220316130615p:plain

 

確認出来たらデバック表示を消しておきます。

DrawDebugTypeをNoneにしておきます。

f:id:namiton:20220316130821p:plain

予測線のマテリアルをどうにかする予定です。

f:id:namiton:20220316130946p:plain

 

⑧全体像

f:id:namiton:20220316130217p:plain

f:id:namiton:20220316130234p:plain

f:id:namiton:20220316130249p:plain

f:id:namiton:20220316130313p:plain

f:id:namiton:20220316130331p:plain

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。