UE4はじめました。
自身のUE4学習もかねて、今回はサンプルSTGを改造して5-Way弾を撃たせるまでの手順を記事として書き残したいと思います。
環境
0. プロジェクト作成
Twin Stick Shooter を選択して新規プロジェクトを作成します。
ASDWで移動、矢印キーで1-way弾の発射ができるSTGが作成されます。 (Alt + Pでゲーム再生)
今回はこのSTGを改造して、5-Way弾を発射できるようにしていきたいと思います。
1. 自機のブループリントを開く
アウトライナの TwinStickPawnを編集 と青字で書かれている部分をクリックしてブループリントを開きます。
弾の生成処理
弾を生成している処理は、FireShot 関数内の以下の黄色で囲った部分になります。
ここを編集して5-Way弾を実装していきます。
STEP2. 弾の向きの変更
CombineRotatorsノードの配置.
CombineRotatorノードを配置します。
CombineRotatorsノード は回転情報であるRotatorに別のRotatorを加算するときに使用するノードです。
今回はこのノードを利用して、弾の回転を実装します。
CombineRotatorsノードの接続
CombineRotatorsの青色のリンクを以下のように繋ぎます。
補足: ピンの分割
ピンを右クリックして Split Struct Pinを選択するとピンを分割することができます。
以上で弾の向きを変更する準備が整いました。
回転が変わることを確認してみる。
ここで、試しにYawへ15を入力してみましょう。
弾が15°ずれた方向へ飛ぶようになります。
Yawの入力値が弾の回転の加算値となるのです。
Forループを使って弾を複数生成する
次に、弾の生成処理にForループをかませて弾の生成処理が複数回呼ばれるようにしていきます。
弾の生成を行っているノードは SpawnActor ノードです。
ForLoopノードの配置
ForLoopノードを配置します。
ブランチノードの出力ピンをドラッグアンドロップするとノードの配置と繋ぎなおしを同時にやってくれるので楽です。
今回は弾を5個撃ちたいので、First Index を -2, Last Index を 2に設定します。
CanFireフラグの設定タイミングの変更
サンプルでは、弾を1回撃った直後に Can Fire フラグ(弾の発射可能フラグ)をOFFにする処理が入っており、弾が1つしか発射できないようになっています。
セットノードの実行フローをForLoopノードのCompletedピンに繋ぎ、 5つの弾すべてが発射されてからフラグがOFFになるようにします。
リンクの切断は Alt + 左クリック で行うと楽ちんです。
ForLoopノードの配置は以上で完了となります。
45°間隔で弾が発射されるようにする
次に、Forループのインデックスを利用して弾の回転を設定していきます。
Forループのインデックスに45をかけたものをYaw(弾の回転)に設定するようなノードを組んでいきます。
(弾の回転) = 45 * (インデックス)
まず、ForLoopノードのIndexピンに int*floatノードを接続します。
そしてfloatに45を入力し、CombineRotatorsノードの Yawに接続します。
以上で5-Way弾を発射する準備は完了となります。
2. 確認してみる
ゲームを再生して、矢印キーを押すと弾が5方向へ発射されることが確認できます。
3. 角度を狭くしてみる
45°間隔で弾が発射されることが確認できました。
次はこれを5°間隔で発射されるようにしてみたいと思います。
先ほどのint*floatノードで45を入力していたところを5に変更します。
弾が1つしか出ない
この状態で弾を撃っても、1つの方向にしか発射されません。
これは、弾同士が接触することによって消滅を起こしてしまっているのが原因です。
なので、弾のコリジョン設定を変更して弾が消えないようにしてみます。
弾のコリジョンの設定
コンテンツブラウザでTwinStickProjectileをダブルクリックしてブループリントを開きます。
ビューポートタブで弾をクリックし、詳細タブからCollisionを設定します。
今回は弾同士のコリジョンを無効にしたいので、Projectile の無視チェックボックスをONにします。
確認してみる
コリジョンが正しく設定できていると、弾が5個発射されることが確認できます。