見出し画像

ボタン操作:上昇下降

※素人による記事の為、間違いがある可能性があります
※個人用備忘録ですが、何かご指摘ございましたらコメント頂けたらと思います



やりたいこと

無重力下でジェットパック背負ってるみたいに
プレイヤーを上昇下降させたい

エンジンバージョン 5.1.1

参考


プロジェクト作成

ThirdPersonテンプレートを新規作成
今回はプロジェクト名を「test」としました


キー入力設定

UE 5.1 から Enhanced Imput というのが正式採用されたので
入力設定はプロジェクト設定では無く、アクターとして作成していきます。

まず、入力を bool値 float1D vector2D なのか定義したアクターを作成します。

All > ThirdPerson > Imput > Actions フォルダに
右クリックで Imput > Imput Action を新規作成
IA_Fly とリネーム


IA_Fly を開き、ValueType を Axis1D にする。
(上昇下降は高いか低いかの1次元なので)


入力に対して、キーボードのどのキー、パッドのどのボタンか、設定している IMC_default を開きます。


下記の様に設定します
⓷は「Q」 ⓸は「E」
⑨は Negate で、反対になるのでマイナスになる(Eキーは下降なので


※Swizzle Imput Axis Values は使わない

デフォルトの移動処理で使っているのですが、それはあくまで2軸必要だからであって1軸の場合は必要ないです。

これは何か?というと
「キーボードやパッドから入力される値」を XYZ → YZX のように別の軸に変換する設定です。
WASDキーで見てみると
Wキーでは        X=1 Y=無し Z=無し という値を取れます。
それをYZX に変換するので Y=1 X=無し Z=無し となります。

この値はEnhancedImput Actionノードで赤枠から出力されます

つまりデフォルトだとキーボード入力が全て X の値になってしまう為、ノードからYとZは引っ張ってこれないので、このように軸変換しているのです。


プレイヤーBPに上昇下降処理を書き込む

プレイヤーBPを開く


下の画像の様にノードを組みます。
A IA_Flyからの入力
B Flying モードに設定します(これしないと飛ばない)
C Pawn を WorldDirection で定めた方向にScalarValue分動かします
D キャラの回転を取得
E 与えられた回転値から上方向のベクトルを返す


デフォルトの移動処理の解説

上で組んだ処理とは、デフォルトの移動処理は違っています。

AとC Get Controll Rotation、キャラでは無くカメラの回転を取得
B   与えられた回転から右方向ベクトルを返す
D   与えられた回転から前方向ベクトルを返す

なぜ Get Controll Rotation を使っているのか?
キャラでは無く、画面から見た方向に動いて欲しいからです
上昇下降処理では画面では無くキャラ基準なので使ってません。

なぜ、Pitchは繋いでないのか?
カメラが煽り俯瞰になった時に前方が傾くから、繋ぐ必要が無い

なぜRollは繋いだり繋がなかったりしているのか?
わからない、基本繋ぐ必要はない。Yawだけで十分

詳しい解説はこちら


ベクトルの方向知りたい時

ベクトルを扱ってると、どの方向を取得してるのか知りたくなります。
その時は下記記事のやり方でいけます。

因みに、上の記事内ではプレイヤーの位置にオフセットしていますが、Add Movement Imput の WorldDirection では、単純に方向だけ知れればいいのでオフセットはしなくて良い(当たり前体操)



足滑りを軽減と Can Fly

右赤枠に数値を入れると飛行時に滑るのが軽減されます。
CanFlyはオンじゃなくても飛べますが、一応オンにしてた方が良さそうな気がするのでオンにしてます(よくわからない)


テストプレイして完了


この記事が気に入ったらサポートをしてみませんか?