目次
はじめに
注意
UE5Preview2の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
流れ
・Splineコンポーネントのスプラインポイントを弾道予測生成の配列から生成します。
・スプラインポイントを元にSplineMeshコンポーネントを動的に生成し、それぞれの始まりと終わりを設定します。
・SplineMeshコンポーネントを配列にキャッシュして削除+スプラインポイントをクリアします。
解説
①Splineコンポーネントの追加
BP_Cannonを開きます。
弾道予測は曲線を描くため紐などを表現するSplineコンポーネントを追加します。
値はそのままにしておきます。
②配列の変数化
弾道予測生成ノードの後にシーケンスノードを追加します。
また、配列にアクセスしやすいように変数を作成します。
ベクター型の配列を変数化しました。
配列とは
配列とは型の集まりです。
集合住宅の部屋番号のように大量の値が0番から順に格納されていきます。
画像の例だと集合住宅の部屋番号1番の値を取得しています。
また、Lengthを使うといくつ部屋があるか分かります。
③スプラインポイントを弾道予測生成の配列から生成
シーケンスノードからForEachLoopに接続します。
配列の数だけSplinePointを作成して設定します。
④SplineMeshの動的生成
次にスプラインポイントの数からいくつか引いた数回数分ループさせます。
これにより予測線の末端が決定します。
Indexは変数化しておきましょう。
ForLoop
オーソドックスな繰り返しノード
FirstIndex+1しながらLastIndexになるまでLoopBodyに信号を出力します。
SplineMeshコンポーネントを動的に追加します。
またそのスケールを設定できるようにします。
SplineMeshコンポーネントはSplineに沿って任意のメッシュを生成します。
StaticMeshにCylinderを登録しましょう。
またコリジョンプリセットはNoCollisionにしておきます。
⑤SplineMeshコンポーネントの配列化と追加
スプラインメッシュは弾道予測が更新されるたびに削除する必要があります。
そのため生成する段階で、参照を配列に登録する必要があります。
SplineMeshコンポーネントの配列を作成し登録してみましょう。
まずは変数へ昇格を押します。名前をSplineMeshsにしておきます。
変数の詳細からブロックアイコンを押して配列に変更します。
変更を押します。
これでSplineMeshComponentを格納できる配列が作成できました。
配置していたノードが配列に変わったことでエラーになっています。削除しましょう。
配列に値を格納するにはAddを行います。
ピンを繋げると配列に追加されます。
⑥生成したスプラインメッシュの位置調整
スプラインメッシュはPathPositionsの配列を元に生成されています。
そのためPathPositionsの値を取得することで生成したスプラインメッシュの位置を確定させることができるはずです。
メッシュの始まりと終わりを指定するノードSetStartandEndを追加します。
一見複雑そうですがやっていることはシンプルです。
SplinePointIndexを元に Path Positionsの座標を取得しているだけです。
TangentatSplinePointはスプラインポイントを生成したときに発生する補完骨の位置ベクトルです。これを正しく設定しないと回転に謎のうねりが発生するので気を付けてください。
スケールを変数化しておきましょう。
予測線の太さを変更できます。
変数の公開も行っておきましょう。
⑦スプラインメッシュとスプラインポイントの更新
このまま実行すると毎フレーム配列に追加しメッシュを生成し続けるのでゲームが落ちます。
予測線を生成する前に過去の情報をクリアしてしておきましょう。
DestroyComponent
ターゲットに入力されたコンポーネントを削除する。
Clear
任意の配列の中身を丸ごと削除する。
生成する前に配置します。
コンパイルして実行してみましょう。
予測ポイントに沿ってメッシュが描画されているはずです。
Start ScaleとEnd Scaleをいじると形状が変化します。
いろいろ調整してみましょう。
確認出来たらデバック表示を消しておきます。
DrawDebugTypeをNoneにしておきます。
予測線のマテリアルをどうにかする予定です。
⑧全体像
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。