UE5のEnhanced Inputについて
始めに
UE5ではEnhanced Inputという強化された入力システムがデフォルトで
オンになってます。
FPSやTPSのテンプレートでも使われておりこれらの意味が分からなかったので
備忘録という意味で記事を書きました。
この新機能はボタン長押しや、指定秒数間だけ押した後に
入力を発行するなどかなり高度なことができます。
そしてこの様な機能を利用するために
・InputAction
・Input Mapping Context
という2つのアセットを作成する必要があります。
今回はゲームでよくある「2秒間押し続けたら攻撃をする」という処理を
やりたいと思います。
目次
結論
いきなりですがこのような処理を書き
ボタンを2秒間押し続けると
以下のような結果になります。
処理の流れ的には最初に
- 登録したボタンを押したとき、Startedの処理を実行
- そのボタンを2秒間押し続けたときにTriggeredの処理を実行
という感じです
解説
上記のことを行うのにEnhanced Inputを使用しますが
このEnhanced Inputを使用するには2つのアセットを作成して
セットアップを行う必要があります。
まず適当にTPSテンプレートプロジェクトを作成したら右クリックから
・InputAction
・Input Mapping Context
というアセットを作成します。
- InputAction
従来のBindAxisとBindActionをまとめて更に長押し等の高度なことを定義できるアセットです - Input Mapping Context
定義したInputActionをまとめて複数まとめて管理するアセットです。
まずInputActionを作成して、適当に名付けした後それを開くと以下の画像のように
なります(今回は攻撃という意味でIA_Attackにしました)。
線で引かれてる部分に注目してほしいのですが
- Value Type
入力イベント時に出力する値の型を決めます。 - Triggers
これはイベントを発行する為の条件をここで定義します右のプラスボタンを押すと以下のようになります。
- Down
ボタンを押してる間だけTriggerを発行する - Hold
指定秒数間だけボタンを押し続けるとTriggerを発行する - Pressed
ボタンを押した時だけTriggerを発行する - Released
ボタンを離した時だけTriggerを発行する
- Down
- Modifiers
入力情報を加工する。右のプラスボタンを押すと以下のようになります。
- Negate
指定の軸に対して値を反転します。
X軸なら本来1.0が出力されるのが-1.0になります。 - Swizzle Input Axis Values
入力軸の値を指定のOrder順に入れ替えて調整する。
- Negate
説明は大体こんな感じです。
さて、先ほど作成したInputActionの設定はこんな感じになりました
攻撃は2秒間溜めた後に行いたいので上の画像のような設定にします。
次に作成したInputActionをMappingContextに登録します
Mappingsの横にあるプラスボタンを押すと以下の様に登録できるので
作成したInputAction(IA_Attack)を登録します。
登録すると以下のようになります。
ここで登録したInputActionにはどのキーを対応させるかを決定します。
ここまで行ったらセットアップは完了です!!
以下の画像のように登録したInputAction名(IA_Attack)のイベント関数を
検索ボックスから出現させることができます
画像を見ると様々な入力ピンがありますがそれぞれ意味があります。
- Triggered
指定した条件によってTriggerが発生した時、もしくは発生中に
入力イベントを発行します - Started
Triggerの条件を検知する時に、入力イベントを発行します - Complited
Triggerが終了した時に入力イベントを発行します - Canceled
Triggerが発生しなかった時に入力イベントが発生します - Action Value
InputActionアセットの部分で定義したものが表示されます。
なお、作成したInputActionからイベントを動作させるには
最初に以下の処理を書く必要があります
これは作成したInput Mapping Contextを登録するという処理です
これでようやく入力処理を実行することができます。
結論再び
最初の画像と同じですがセットアップを行った後、このような処理を書いた後に
指定したボタンを2秒間押し続けると
チャージ開始
チャージ攻撃!!
と表示されるはずです、実際に試してみると。
予想通りの結果になりました。
まとめ
手順としては
- InputActionとInput Mapping Contextを作成する
- InputActionに入力の定義を行う
- 作成したInputActionたちをInput Mapping Contextに登録して
キーバインディングを行う - BP上で処理を記述する
最初は従来のBindingInputと違い結構設定項目があり戸惑うかもしれませんが
慣れてくるとかなり高度なことができると思います。
皆さんもぜひいろいろいじって試してみて下さい
UE5.2以降のプラグインのパッケージングの際の注意点!!
題名の通りUE5.2以降で自作のPluginをパッケージングする際の注意点を
備忘録としてまとめました
(僕はこれにハマり約半日無駄にしたので同じ人が出ないように・・・)。
先に結論ですがPluginでRayCastを使用する処理がない場合は今回の記事は
関係ないのでブラウザバッグ
関係ある人は読み続けて下さい。
それでは
Pluginを作成するときは大体以下の手順で作成するかと思われます。
テンプレートを選択してPluginの名前を決めます(今回はCPPTest)
その後、任意のC++クラスを追加します。
今回はActorComponentを継承したクラスを作成しました。
さて、作成したクラスを開いてみると以下のようになってるかと
思われます。
緑で囲った部分が追加した変数です。そしてこのままPluginをパッケージングすると
エラーをはいて怒られます!!
エラーの内容が
FHitResult:Rayが衝突した時の相手の情報をまとめる構造体
が未定義ということでした。
おそらく必要なヘッダファイルが足りないと予測したので
公式ドキュメントで調べてみると
docs.unrealengine.com
なんと、APIが5.1以前のもので5.2以降は近々作成されるとのこと!!
当然書かれてるヘッダファイルのパスも違うと思うし
ページが更新されるまで待てないので自分でパスを調べに行きました。
先に言ってしまうと調べたパスをヘッダファイルにインクルードした所
エラーを吐かずにパッケージが通りました!!
そのパスの調べ方なのですが
未定義と怒られた型情報を調べるとできます
画像のオレンジで囲った部分にカーソルを持っていきCtrl+左クリックで
型が定義されてるヘッダファイルへ飛ぶことができます。
画像のように以下のような感じになります
そして出現したヘッダファイルを右クリックして完全パスのコピーを
選択します。そうすることでパス情報がコピーされるので
あとは
以下の画像のように(注:MyActorComponentのヘッダファイルです)
パスを張り付けておけば未定義とならずに済みます。
上の画像の水色で囲った部分がパスを張り付けたものですが、
パスが長すぎる上にパスの区切りがバックスラッシュになってるので
適切な形に修正します(修正したものが青色で囲った部分です)
自分はこの方法を発見できるまで半日という長い時間を無駄にしました
参考になれば幸いです。
もっといいやり方があればぜひ教えて下さい。
UE5.1Previewについて
UE5.1のPreview版が約1ヶ月前に出ました
そして[Async Physics Tick]という新しい関数も公開されました。
BP版
C++版
これらは物理演算版のTickであり、UE5で実装された
非同期物理シミュレーションのTickRateに応じて更新頻度が
変動するというものです。
これにより僕も含めた物理に依存するコンテンツを作成してる方には
とても嬉しい機能ではないでしょうか。
というのも物理シミュレーションはフレームレートが変動せずかつ
更新頻度が一定である事が望ましいので
AsyncPhysicsTick関数を使用する事でfpsに依存しないより信頼性のある
物理挙動が作成出来るのでは無いでしょうか。
というよりもUE5.1でようやくこの関数が実装されたか・・・
僕がUnrealEngineを始めたきっかけ
ゲームを作る際にお世話になるソフト(ゲームエンジン)には色々あり
メジャーなものでは
- Unity
- UnrealEngine ( UE )
- GodotEngine
- BlenderGameEngine ( BGE )
などがあります。この中でもUEに関しては前から少しだけ触っていましたが
当時使っていたUnityと比較して何が何だか訳分らんという感じでした。
(それでも箱から出した状態のグラフィックには惹かれました)
そんな中EpicGameJapanさんから以下のようなUE4の公式チュートリアル動画が出ました。
猫でも分かる UE4を使ったゲーム開発 超初級編 #1:まずはプロジェクトを作ってUE4エディタを触ってみよう! - YouTube
この動画(猫でも動画)を見て
UnrealEngineを始めるきっかけになりました。
上記のチュートリアル動画の内容はざっくりと
- Projectの作成とエディタの操作
- BlueprintClassとBlueprintの作成
- Collision等の当たり判定を用いたゲームロジック作成
- Animationの共有方法
このような感じでUEを使うにあたって必要な基礎の基礎が詰まってます。
そしてお二人の解説がとても分かりやすく更にBlueprintによって
オブジェクト指向の理解がより深まったので
僕自身が大きく変わったといっても良いくらいです。
まだUEが分からず猫でも動画を見てない方は上記の動画を見て
ぜひUnrealを始めてみて下さい。