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を発行する

 

  • Modifiers
    入力情報を加工する。右のプラスボタンを押すと以下のようになります。

    • Negate
      指定の軸に対して値を反転します。
      X軸なら本来1.0が出力されるのが-1.0になります。
    • Swizzle Input Axis Values
      入力軸の値を指定のOrder順に入れ替えて調整する。

 

説明は大体こんな感じです。
さて、先ほど作成した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秒間押し続けると

 

 

チャージ開始
チャージ攻撃!!

と表示されるはずです、実際に試してみると。

予想通りの結果になりました。

 

まとめ

手順としては

  1. InputActionとInput Mapping Contextを作成する
  2. InputActionに入力の定義を行う
  3. 作成したInputActionたちをInput Mapping Contextに登録して
    キーバインディングを行う
  4. 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のヘッダファイルです)
パスを張り付けておけば未定義とならずに済みます。

上の画像の水色で囲った部分がパスを張り付けたものですが、
パスが長すぎる上にパスの区切りがバックスラッシュになってるので
適切な形に修正します(修正したものが青色で囲った部分です)

自分はこの方法を発見できるまで半日という長い時間を無駄にしました
参考になれば幸いです。

もっといいやり方があればぜひ教えて下さい。

 

 

 

 

僕自身についての自己紹介



・何者?
 - 自称ホビーゲームプログラマ(ゲームプレイ)
・ゲームの中で興味がある分野
 - キャラクターの移動挙動の作成

・好きなツールや触ってるツール
 - UnrealEngine ( メイン )
 - GodotEngine ( メインになるかも? )

 - UnityEngine ( 検討中!! )

 - Blender ( モデル作る時 )

・好きなプログラミング言語
 - C++( 汎用言語 )
 - Blueprint ( UEのビジュアルスクリプト )

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を始めてみて下さい。






このブログについて



このブログは主にゲーム開発についての事を書いていこうと思います。
主にUnrealEngineがメインで内容としては
備忘録的なものから感じたことまで色々です。
ただ、他のUE関連のブログと比較して

一味違った内容になるかと思います。

というのも他の人がやらないような独自の機能を作成したりしてます。
その中で学んだ事なども書いていこうと思います。


【 注意!! 】
僕自身間違ったことを書いてる可能性があるのでその時はコメントなどで
教えて下さい。