Gaming Life

一日24時間、ゲームは10時間

UE4進捗1-2 SideScrollerテンプレートでエイム方向を制御する

 こんにちは。未だにブログでの口調が決められません。暫く統一感のない文章になると思いますがじき直して行くので許してください。

 前回記事で、UnrealEngine4付属のSideScrollerテンプレートを少し改造して弾を撃てるようにしましたが、プレイヤーが向いている方向にしか撃てない、テンプレートのままのBPだと同じX軸上にしか敵はいないのに、左から右にキャラの向きを変える時一時的に正面を向いてしまい、その向きで弾を撃つと手前方向に飛んでしまうという不具合が有りました。今回はそれを直していこうと思います。

プレイヤーが正面を向いてしまう問題を解決する

f:id:ai_gaminglife:20171019004042p:plain

 これはすぐ解決しました。「Input MoveRight」の出力ピンであるAxis Valueに-90をかけた値を「Make Rotator」ピンのZにつなげてRotatorを得ます。それを「set ActorRotation」に繋げば終わり。上の画像では間に色々処理をしていますがエイム制御に用いているので次で説明。

弾を8方向に発射できるようにする

 まずコンテンツブラウザからblueprint -> enumrationを選んで新たに作成しましょう。わかりやすいように AimDirection と名前を付けました。  enumとは列挙型のことで、わからない方は各々調べてください。なんせ私もこれを作っている途中で知ったので……  AimDirectionの中身はこのようになっています。

f:id:ai_gaminglife:20171019004058p:plain

 以降は込み入ってるのでざっくり方針を説明して実際のBPの画像を示すことにしましょう。

  1. Project Setting -> Input から MoveUp を新たに定義。中身はW(Scale:1.0)、S(Scale:-1.0)。

  2. 「InputAxis MoveRight」の出力ピンからBranchで場合分け。それに応じて SideScrollerCharacter 内で新たに定義したAim Direction型の変数 Horizontal Aimをセットする。

  3. 「InputAxis MoveUp」の出力ピンからBranchで場合分け。それに応じてAimDirection型の変数 Vertical Aimをセットする。

  4. 「Event Tick」から「Switch on AimDirection」を使って9パターンに実行ピンを分ける。AimDirection型の変数 FinalAim Directionに対応する文字をセット。

  5. 確認のためFinal Aim Directionの中身を表示する関数「Debug Aim Direction」を実行。

  6. 再び「Switch on AimDirection」を実行し、それぞれ対応するVector型変数 Aim Vectorをセットする。 例:「Up」の時は(0.0, 0.0, 1)、「Right Down」の時は(0.0, 1.0, -0.3)

  7. 弾のBP、BP_ShotFireに新たに Vector型変数、 SpawnVectorを定義。これは「編集可能」と「スポーン時に公開」にチェックを入れる必要がある。

  8. 7の作業をするとスポーン時にActorに引数を渡せるようになる。Spawn Actorに、Aim Vectorをコピー。

  9. 「Construction Script」に「Set Veloctity in Local Space」を繋げる。これでProjectileMovementコンポーネントの方向を動的にセットできる。引数にはSpawn Vectorを使用。

f:id:ai_gaminglife:20171019004111p:plain f:id:ai_gaminglife:20171019004123p:plain f:id:ai_gaminglife:20171019004138p:plain f:id:ai_gaminglife:20171019004151p:plain

これで出来たはずです。

振り返り

  • enumは超便利。
  • バクダンはこの方法だと投げ飛ばす感じにならないので今後の修正点。
  • 動きながらしか弾が打てない。