ゲーム開発備忘録

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

【ゼロからアンリアルエンジン5】 ⑪プレイヤーを狙う大砲を作ろう=砲台と弾道予測システム=

目次

 

はじめに

注意

UE5Preview2の現在の情報です。

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

 

解説

①大砲ブループリントを作る

コンテンツブラウザ右クリックからブループリントクラスを選択します。

f:id:namiton:20220310153315p:plain

ウィンドウからActorを選択しましょう。

名前をBP_Cannonにしましょう。

f:id:namiton:20220310153503p:plain

 

②見た目の調整

作成したブループリントを開き

StaticMeshコンポーネントを2つ追加します。

f:id:namiton:20220310153725p:plain

名前を

CannonHead

CannonBody

に変更します。

メッシュをそれぞれ変更します。

メッシュデータはエンジンコンテンツ/BasicShapesのものを利用します。

CannonHeadはSphere

CannonBodyはCylinder

に変更します。

f:id:namiton:20220310154308p:plain

配置ついでにビューポートの視点変更について説明します。

ビューポートのパースペクティブを押すと水平投影に切り替えることができます。

試しににしてみましょう。

f:id:namiton:20220310154425p:plain

左から見たビューに切り替わりました。

f:id:namiton:20220310154538p:plain

デフォルトでエッジのみが表示されるワイヤーフレームになりますが、

こちらも設定を変更することで見た目を調整することができます。

f:id:namiton:20220310154643p:plain

ライティングなしにした場合

f:id:namiton:20220310154731p:plain

ワイヤーフレームに戻し

それぞれのZを100と50に位置を変更します。

f:id:namiton:20220310154816p:plain

パースペクティブで見るとこんな感じです。

f:id:namiton:20220310154948p:plain

ついでに砲身も作っておきます。

CannonBodyを複製して

名前をCannonBarrelにしておきましょう。

頭の部分と一緒に動いてほしいのでHeadの子にします。

f:id:namiton:20220310160537p:plain

トランスフォームを画像のように変更します。

拡大縮小の隣の鍵がかかっていると比率を保持したまま拡大縮小するのでクリックして解錠してあげましょう。

f:id:namiton:20220310181753p:plain

マテリアルが暗いのでBP_Receiverと同じものを割り当てましょう。

BP_Receiverを開きStaticMeshコンポーネントを選択しましょう。

マテリアルの欄にファイルに虫メガネアイコンが付いたボタンがあります。

f:id:namiton:20220310155801p:plain

押すとコンテンツブラウザ上に使用しているマテリアルにジャンプします。

f:id:namiton:20220310155858p:plain

青く選択されている状態でBP_Cannonに戻りましょう。

それぞれのメッシュのマテリアルにあるコンテンツブラウザから選択したアセットを使用というボタンを押すことで適応することができます。

f:id:namiton:20220310160011p:plain

色が付きました。

コンパイル後にレベルタブに戻り配置してみましょう。

いい感じですね!

向きや位置があっているか確認しましょう。

f:id:namiton:20220310181831p:plain




③砲身を回す

BP_Cannonに戻ります。イベントグラフから以下のようにノードを組みましょう。

CannonHeadの現在の回転を取得しZ回転に1加えたものをセットしています。

f:id:namiton:20220310161146p:plain

実行してみましょう。

ぐるぐる砲身が回り始めたら成功です。

f:id:namiton:20220310185004p:plain



※動かない場合はトランスフォームの可動性がムーバブルになっているか確認しましょう。

f:id:namiton:20220310161414p:plain

 

④プレイヤーが一定範囲に近づくと反応するようにする

まず距離を計測します。

プレイヤーと大砲本体のワールド座標を引き算してベクトルの長さを求めます。

f:id:namiton:20220310191628p:plain

実行して距離が出るのを確認します。

f:id:namiton:20220310191701p:plain

150以上1000以下の範囲がよさそうなので

ブランチノードで条件分岐します。

f:id:namiton:20220310191853p:plain

⑤プレイヤーに向けての弾道予測線を出してみる

空気抵抗を考慮した弾道予測を既存のノードで行えます。

Sceneコンポーネントを追加して名前をBarrelTopにします。

f:id:namiton:20220310192137p:plain

位置を発射口に合わせて配置しましょう。

f:id:namiton:20220310192147p:plain

写真のようにノードを組んでみましょう。

f:id:namiton:20220310192450p:plain

DrawDebugTypeをForDurationにしておきましょう。

f:id:namiton:20220310163938p:plain

 

GetPlayerCharacter

プレイヤーが操作しているキャラクターを取得するノード

f:id:namiton:20220310163441p:plain

 

発射速度を計算するノード

f:id:namiton:20220310163630p:plain

 

弾道上にパスを用意し球体のレイで衝突可能かを検出するノード

f:id:namiton:20220310163705p:plain

 

コンパイル後実行してみます。

発射口からプレイヤーまでの弾道予測が表示されます。

また一定範囲外になると表示が消えることも確認してください。

f:id:namiton:20220310192519p:plain

 

⑥砲身角度を調整する

弾道予測線のスフィアポイントの2つを使ってベクトルを求めます。

X軸のベクトルをもとに回転を作成します。

RinterpToでなめらかに補完してあげます。

最後の回転ノードがSetWorldRotationに変更されているのに気を付けてください。

f:id:namiton:20220310192724p:plain

 

RotationFromXVector

X軸方向のベクトルをもとに回転を作成する。

Rollは常に0を返す。

f:id:namiton:20220310193053p:plain

 

RinterpTo

Currentからtargetまでの回転値を補完します。

f:id:namiton:20220310180722p:plain

 

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

砲身が方向に向きます。

f:id:namiton:20220310193232p:plain

次回は弾丸を発射できるようにします。

最後に

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

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

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

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