目次
はじめに
注意
UE5Preview2の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
解説
①大砲ブループリントを作る
コンテンツブラウザ右クリックからブループリントクラスを選択します。
ウィンドウからActorを選択しましょう。
名前をBP_Cannonにしましょう。
②見た目の調整
作成したブループリントを開き
StaticMeshコンポーネントを2つ追加します。
名前を
CannonHead
CannonBody
に変更します。
メッシュをそれぞれ変更します。
メッシュデータはエンジンコンテンツ/BasicShapesのものを利用します。
CannonHeadはSphere
CannonBodyはCylinder
に変更します。
配置ついでにビューポートの視点変更について説明します。
ビューポートのパースペクティブを押すと水平投影に切り替えることができます。
試しに左にしてみましょう。
左から見たビューに切り替わりました。
デフォルトでエッジのみが表示されるワイヤーフレームになりますが、
こちらも設定を変更することで見た目を調整することができます。
ライティングなしにした場合
ワイヤーフレームに戻し
それぞれのZを100と50に位置を変更します。
パースペクティブで見るとこんな感じです。
ついでに砲身も作っておきます。
CannonBodyを複製して
名前をCannonBarrelにしておきましょう。
頭の部分と一緒に動いてほしいのでHeadの子にします。
トランスフォームを画像のように変更します。
拡大縮小の隣の鍵がかかっていると比率を保持したまま拡大縮小するのでクリックして解錠してあげましょう。
マテリアルが暗いのでBP_Receiverと同じものを割り当てましょう。
BP_Receiverを開きStaticMeshコンポーネントを選択しましょう。
マテリアルの欄にファイルに虫メガネアイコンが付いたボタンがあります。
押すとコンテンツブラウザ上に使用しているマテリアルにジャンプします。
青く選択されている状態でBP_Cannonに戻りましょう。
それぞれのメッシュのマテリアルにあるコンテンツブラウザから選択したアセットを使用というボタンを押すことで適応することができます。
色が付きました。
コンパイル後にレベルタブに戻り配置してみましょう。
いい感じですね!
向きや位置があっているか確認しましょう。
③砲身を回す
BP_Cannonに戻ります。イベントグラフから以下のようにノードを組みましょう。
CannonHeadの現在の回転を取得しZ回転に1加えたものをセットしています。
実行してみましょう。
ぐるぐる砲身が回り始めたら成功です。
※動かない場合はトランスフォームの可動性がムーバブルになっているか確認しましょう。
④プレイヤーが一定範囲に近づくと反応するようにする
まず距離を計測します。
プレイヤーと大砲本体のワールド座標を引き算してベクトルの長さを求めます。
実行して距離が出るのを確認します。
150以上1000以下の範囲がよさそうなので
ブランチノードで条件分岐します。
⑤プレイヤーに向けての弾道予測線を出してみる
空気抵抗を考慮した弾道予測を既存のノードで行えます。
Sceneコンポーネントを追加して名前をBarrelTopにします。
位置を発射口に合わせて配置しましょう。
写真のようにノードを組んでみましょう。
DrawDebugTypeをForDurationにしておきましょう。
GetPlayerCharacter
プレイヤーが操作しているキャラクターを取得するノード
発射速度を計算するノード
弾道上にパスを用意し球体のレイで衝突可能かを検出するノード
コンパイル後実行してみます。
発射口からプレイヤーまでの弾道予測が表示されます。
また一定範囲外になると表示が消えることも確認してください。
⑥砲身角度を調整する
弾道予測線のスフィアポイントの2つを使ってベクトルを求めます。
X軸のベクトルをもとに回転を作成します。
RinterpToでなめらかに補完してあげます。
最後の回転ノードがSetWorldRotationに変更されているのに気を付けてください。
RotationFromXVector
X軸方向のベクトルをもとに回転を作成する。
Rollは常に0を返す。
RinterpTo
Currentからtargetまでの回転値を補完します。
コンパイル後実行してみましょう。
砲身が方向に向きます。
次回は弾丸を発射できるようにします。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。