Posted Articles

UE5's articles. (52)

わんころのUE5勉強会 Dec/18/2022 21:26

【UE5】プレイ開始時(PIE)にViewportを1回クリックしなくても操作可能にする

UE5 のエディタ操作でプレイして確認する時、
一度 Viewport をクリックしないと操作ができませんが、設定やノードを利用することで対処が可能です。


メニューバー「編集」>「プロジェクト設定」を開き
レベルエディタ内にある「プレイ」から「ゲームでマウスコントロールを取得」にチェックを入れるとプレイ時にすぐ Viewport をフォーカスしてくれます。


他にもゲーム開始時にロードされる場所(例:レベルBP、作成した Player Controller、Game Mode 等の「BeginPlay」)に「Set Input Mode Game Only」を繋げておいても開始時 Viewport にフォーカスしてくれます。
(画像はレベルブループリントの「BeginPlay」)

これでエディタ操作上でプレイ開始時にすぐプレイヤーを操作できるようになるので、ゲーム制作中は便利なオプションになりそうです。

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Dec/15/2022 19:23

【UE5/UE5.1】Set Input Mode UI Only の癖が強い


Set Input Mode... のノードは三つありますが
その中の「Set Input Mode UI Only」の癖が強くて扱いが難しいと感じた...という内容です。

※ 2022-12-26:Input Mapping Context 使う を追加
※ 2022-12-26:「Set Game Paused」を使う を追加


本題

Widget を表示する時、入力の所有権を UI 側に移すような動きになる「Set Input Mode UI Only」を使うと簡単に UI のみの操作を取ることができます。
(所有権を移すという表現が合ってるか微妙な所ですがそういう風に勝手に解釈しております)

しかし、キャラクターが移動中などキー入力がある状態で Widget を表示すると凄く癖のある挙動をします。


例えばインタラクト可能なオブジェクトがあり、インタラクトボタンを連打しながらそこに向かって移動しているとします。

インタラクトキーが反応し、Widget の表示と「Set Input Mode UI Only」を組み合わせている場合、Widget は表示されますが、なにか対策をしなければ、キー入力をしていないのにキャラの移動はそのまま継続され進み続けます。

UI Only に切り替えたタイミングでキーボードの入力が受付けなくなるようで、移動は止まらないし UI を閉じるキーを押しても反応しない(閉じれない)という面倒な挙動を示します。

恐らくですがキーを離したという情報が伝わってなくてまだ移動中という判定が続いてるような感じがしました。


PC ゲームだと UI 操作に切り替える時
Get Player Controller-> Set Show Mouse Cursor を利用することも多そうに思いますが、UI Only でもデフォルトではマウスカーソルの入力は受付けるので Button Widget などで閉じれるような仕組みを設けておけば大丈夫そうには思います。
(その際「Set Input Mode Game Only」や「Set Show Mouse Cursor」は False にしたりなど必要)

しかし、ゲーム内で本を調べるなどでテキストが出るだけの UI があり、キーを押したら閉じればいいような挙動に、一々マウスカーソルを閉じるボタンに合わせて閉じる...というのも操作感は悪いです。


「Set Input Mode UI Only」+キャラの移動を停止

移動を止めたいだけなら、
Get Player Character-> Disable Movement(Character Movement)で無理やり止めることは出来ました。

UI Only なのでキー入力を受付けるよう例えば Widget 側で関数の「On Key Down」をオーバーライドし、インタラクトボタンに対応するなどで対応は出来そうです。


ただ私の場合は「Client Start Camera Shake」を使い、移動中に Camera Shake を入れているんですが「Disable Movement」で止めてもカメラの振動は止まりませんでした。

直前に「Client Stop Camera Shake」を入れると振動を止めることができるので、例えば「Delay」を使って少し時間を稼いでから「Set Input Mode UI Only」に繋げることで一応回避できたような気もしますがこれも力技な気もします。


キャラの移動とカメラ移動をフラグで監視する


非常に不恰好ですがキャラの移動の前にインタラクト中かどうかのフラグを用いて移動中・カメラ操作中は一生監視しておく方法だとどうか確認しました。

そうすると「Set Input Mode~」を使わなくてもフラグで弾いているのでキャラの移動やカメラ振動は止まり、カメラ操作も受付けず、入力はそのまま生きているのでインタラクトボタンを押して閉じるということが可能でした。


インベントリを開く場合は UI 操作が必要なので「Set Input Mode Game And UI」を利用すれば、実質 UI 操作だけ可能+キー入力は生きたままにすることができました。
(個人的には凄く嫌ですがフラグの ON/OFF だけ管理すればいいので扱い自体はかなり楽だと感じました。)


「Set Input Mode Game And UI」を使う

https://twitter.com/O_Y_G/status/1603230854301749248
CGとかさんより「Disable Movement(Character Movement)」と「Set Game Paused」を教えて頂きました。
本当にありがとうございます!!



結果的に上記方法でやりたかったことが実現できました!
「Set Input Mode Game And UI」を使うので Game に対しての入力はなくならず、「Disable Movement」でキャラの移動が止まったらカメラ振動も連動して止まりました。

キー入力で UI を閉じることもできるし、マウスカーソルも出るので UI 操作も可能です。

勝手な思い込みで、UI に操作が移ったらそのままキャラも止まると思っていたためこんなことが起こると思ってませんでしたw


「Set Game Paused」を使う

これはゲームそのものを今の状態で一時停止する時に使えそうな関数でした。

キャラやカメラが移動中に止めると画面ブレの状態で止まるので、ゲームによってはこういう方法で止める方法もいいなと思いました。

「Set Game Paused」を使う場合は、その間キー入力が取れないようなので、キー入力を受け付けるボタンを用意しないといけません。


▼ プロジェクト設定> インプットで軸・アクションマッピングの場合

Pause 中に取りたい入力イベントを選択し、「詳細」パネルに表示される「Execute when Paused」にチェックを入れるとこのキーが Pause 中に有効になります。


▼ Enhanced Input の場合


Enhanced Input の場合は Pause 中に取りたい入力の Input Action を開き、「Trigger when Paused」にチェックを入れるとこのキーが Pause 中に有効になります。

Input Mapping Context 使う

「Set Input Mode Game And UI」だと UI もゲーム操作も可能になりますが、UI を表示するタイミングで Enhanced Input の Add Mapping Context を利用し、UI を操作する用の入力アクションを追加します。

Add Mapping Context は必要に応じて Priority の引数をメインの Add Mapping Context した時よりも大きくしておきます。

Priority や Add Mapping Context については、以前の記事で触れています。
【UE5】Enhanced Input:Priority や Consume Input の検証


こうすることで、キャラの移動とは別に UI 専用の操作をすることができるため結構簡単に切り替えが出来ると思いました。

私の場合は、キャラ移動などのメインの Input Mapping Context をこのタイミングで Remove Mapping Context を使って削除しています。

Enhanced Input だと入力がアセットになっているのでこういう付け替えが出来るので凄く便利だと感じました。

おまけ

UE5.1 だと引数に Flush Input が追加されている

https://twitter.com/UE5wancoro/status/1603066442001174534

UE5.1 で検証をしてみようと思った時「Set Input Mode~」系のノードに Flush Input という引数を見かけました。

UE5.0.3 にはなかったため、 UE5.1 の Set Input Mode UI Only 公式ドキュメント も覗きましたが載ってませんでした。

名前から何となく察してはいましたが、チェックを入れて「Set Input Mode UI Only」で確認するとキャラの移動とカメラの振動が止まるので、恐らく Player Controller(?)に対して入力の Flush 処理を行っているんだと思われます。

UI Only であることに変わりはないので UI の操作をどうするかは別途考えなくてはいけません。


Common UI:Activatable Widget はどう?

https://twitter.com/UE5wancoro/status/1565871633029812225
以前の検証で Common UI の Activatable Widget を利用することで、恐らくデフォルトで UI Only の操作になり「Set Show Mouse Cursor」が True の挙動を示すことを確認できておりました。

そこで、今回のケースではどうなのか改めて確認するとなんとキャラの移動とカメラ振動が止まってました!

余談ですが「Activate Widget」した後にマウスカーソルも自動で表示されますが、その後に「Set Show Mouse Cursor」を False にしてもカーソルは消えませんでした。「Deactivate Widget」後であれば消えたので、そういう挙動なのかも?


どういう条件で止まるのか、デフォルトでそういう挙動なのか気になったため下記条件で検証してみました。

  • 「Set Input Mode~」は使わない
  • Widget 表示は「Add to Viewport」→「Activate Widget」のみ
  • 「Get Desired Focus Target」のオーバーライド有無
  • 「Deactivate Widget」は後始末のため考慮せず


その結果のまとめがこの画像です。

表示する UI に対し、なんらかの Widget が Activate された時点でキャラ移動とカメラの振動が止まるという結果になりました。

最後に

そんな感じで「Set Input Mode UI Only」の癖が凄いという内容でした。

UI Only とはあまり仲良くなれた気はしませんが、今回の件で UI 表示する時の挙動についてとても勉強になったと思います。

こういう当たり前のように使う機能の基本的な挙動が全然わかってないので、1個覚えるごとに2-3個は分からない所が出てくるので本当に難しいですw


改めまして CGとかさんにお礼申し上げます。
本当に本当にありがとうございました!!!!

  • Icon
    tom ID01150628
    めちゃくちゃ参考になりました!ありがとうございます

1 tips have been sent.

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Dec/14/2022 12:00

自作ゲームの進捗01:食堂っぽい部屋を作成

自作ゲームの進捗報告です。

何個かの謎解きをメインにした脱出ゲームで、
ちょっとしたホラー要素を入れる予定です。

以前このようなクロックタワー系の視点で動画を公開しました。

メインは脱出ゲームなので 2D 視点だとちょっとやりにくかったので 3D にシフトしました。



その中で作成した部屋の1つで食卓をイメージした部屋です。
周りが殺風景なのでもう少しなんとかしようと思います。
3D にしたためマップの構成が難しくなりましたね...


謎解きっぽい雰囲気を出すための読み物演出です。
以前作ってたものをこちらのプロジェクトへ移行しました。

内部的な部分をメインに触っていたので見た目に新しい変化はあまりないですが一応。


Save/Load の仮組みを実装。
規模によりますが Auto Save 機能も一応入れようと思ってます。


イベントの進捗管理を Boolean 型の配列で管理していたのを
map<String, Boolean> に変更しました。
どのイベントとインデックスが紐づいているのか把握し辛かったためです。

これで指定のイベントが完了したかを容易に取れるようになりました。


Widget へ表示するテキストを Data Table から読み込み→ 表示としてましたが、最初に一括で読み込んで変数として持っておくように変更。

Data Table と連動もさせたかったので、
map<Name, Text> で作成し、Data Table の行(Row Name) と紐づけるようにしました。

これで Data Table の行の名前を引数で送るだけで
それに対応したテキストを Widget で表示できるようになりました。

特定のものを探して取得したい時は map が使いやすいですね。


  • インタラクト可能なオブジェクトの基本
  • 取得可能なアイテム系
  • 読み物系
  • イベント系

など、これ以降のプロジェクトでも利用できるように Blueprint の Base Class を作成。後は継承して量産していけば良さそうです。


もしかしたらイベントで変化させたりする可能性があるものを Data Layer を使って一応レイヤー分け。


お試しで Level Instance も用いて同じものを使いまわしてみるテスト。

World Partition は有効にしてますが Streaming するような規模でもないので今のところは Streaming なし。


そんな感じで今月に入ってから色々作業をしておりました。
ここまで勉強を続けてこれたおかげで色々な機能を利用できてるような気がします。

今年も残りわずかとなりましたが、変わらず UE5 の勉強も少しずつ行っていこと思っております。UE5 使ってもう8ヶ月経ったみたいです...早いですね...

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Dec/06/2022 20:14

【UE5:検証】World Partition レベルと通常レベルのBeginPlayについて

※ 本記事は検証したことをつらつら書いただけです。
※ なにかを解決できたわけではないのでご注意下さい。
※ UE5.0.3 で検証しております。


先日、取得したアイテムをセーブ&ロードするという動画をアップロードしました。
https://www.youtube.com/watch?v=gzuJjpxYPz4

その際World Partition を使ったレベルに対してこの方法で実装すると意図した挙動にならないというコメントを頂きました。


更にどううまく行かなかったのか具体的な検証方法もコメント頂けました(本当にありがとうございます!)


<準備>


メニューバー「ファイル」>「新規レベル」から "Open World" を選択し WPMap(World Partition Map の略) という名前をつけました。

"Open World" で作成すると World Partition の設定や Enable Streaming が自動で有効になります。

WPMap にアイテムを5つ配置しました。
この青い箱が BP_Box という名前のアイテムを想定しています。


WPMap のレベルBP に画像の処理を記載します。
ゲームスタート時 BP_Box をすべて消すという処理です。

<検証頂いた内容>
WPMap からゲームスタートすると BP_Box はすべて削除されるが、別レベルへ移動して WPMap に戻ってくるとアイテムが削除されない。

更に World Partition を有効にしていない通常のレベルであれば問題がなかったという検証内容でした。

要するに WPMap のレベルBP が二回目以降機能しなかったということになりそうです。


このコメントを受けて私も検証させて頂きました。


分かりやすくするため画面上に削除されたアイテム数を表示しています。
WPMap からスタートすると BP_Box は全て削除されていますが、もう一度 WPMap に戻ったら確かに消えていません。

続いて次の検証してみます。



今度はデフォルトの ThirdPersonMap からスタートし、WPMap へ移動するというものですが、BP_Box は削除されていないことが分かります。

しかし WPMap のレベルBP に書いた「削除したアイテムは0個です」という表示は出ているため、レベルBP は実行されている事もわかります。

もう一つ検証してみます。



メニューバー「ファイル」>「新規レベル」から "Basic" を選択し NMMap(Normal Map の略) という名前をつけました。

"Basic" で作成すると通常のレベルになります。
World Partition との違いを確認するため用意しました。

NMMap にも同じく BP_Box を置いてあります。
レベルBP にも上記と同じ「Destroy Actor」する処理も記載してます。



NMMap からスタートすると BP_Box は削除されています。

ThirdPerson Map へ移動し、NMMap に戻ってくるという動きを何度か行ったところ、正しく削除されていることが分かります。


この内容から World Partition からスタートした場合と、別のレベルから World Partition のマップに移動した場合で挙動が違うということが分かります。

通常のレベルでは問題がなかったというのは
別レベルから通常のレベルに戻ってきても問題はなかったということになります。

マップの移動には「Open Level(by Name)」や「Open Level(by Object Reference)」を使用しています。



少し話は逸れますが World Partition にある機能の一つで Enable Streaming があります。

メニューバー「ウインドウ」>「ワールドセッティング」で確認できるプロパティです。

オープンワールドのような広大なマップを想定するとほとんどの場合、遠い場所にあるものをロードしておく必要はないため、設定した範囲外のものはロードさせないようにできる凄い機能のことです。
(余分なリソースを使わないようにできる)

次はこの Streaming に注目した検証を行いました。


先程の検証で WPMap からスタートすると BP_Box は全て削除されました。

実はこのスタートした場所は Streaming の機能でアイテムがロードされる距離でスタートしていました。

そうなると次の疑問は、Streaming の範囲外からスタートした場合はどうなのかです。



WPMap からスタートしましたが、削除されたアイテムは0個と表示されたことが確認できました。

そして少し近づくと Streaming の機能が働き BP_Box がロードされたという結果になりました。

Streaming でアンロードされている状態の BP_Box は「Get All Actors Of Class」で取得できなかったということになります。


「アウトライナ」パネルを確認すると、アンロードではレベル上に存在せず、ロード状態で初めて表示(インスタンス化されてる?)ような挙動をしています。


アクタ個別の「詳細」パネル> ワールドパーティションという項目に "Is Spatially Loaded" の設定があり、チェックを外すと一応この問題は解決されます。


"Is Spatially Loaded" にマウスオーバーするとこのような表記が出ます。
True の場合は Streaming の範囲内であることも条件に含まれていることが分かります。

チェックを外すと Streaming の範囲外でもロードするという設定になるため、数が多かったりロードする容量が多いと場合によっては微妙かもしれません。


※注)ここから先は検証方法があってるのか分からないので頓珍漢なことを言ってる可能性があります。


ポップアップには (1)DataLayer にないこと、(2)複数の DataLayer が有効になっている場合ということも条件に含まれています。

DataLayer とは、例えばレベル上に配置したアクタをレイヤー分けし、ロードやアンロードを好きなタイミングで実行することができるこれまた凄い機能のことです。

お絵かきソフトにあるレイヤーと同じような扱いと考えると分かりやすいかもしれません。

例えば、同じ街でも物語の序盤と中盤で見た目が変わるような作りにすることができます。
1つ目のレイヤーに綺麗な街並みを、2つ目のレイヤーに荒廃した街並みと分けることでロードすべき DataLayer を好きなように切り替えれます。

しかも DataLayer は実行時(ランタイム)以外にも
エディタ操作の設定も扱うことができるのでとてもいい機能だと思います。


5つ全ての BP_Box に "Is Spatially Loaded" を OFF(False) に設定しました。

まず「(1)DataLayer にない」というのは DataLayer に追加されていないことを指しているのかなと思い次の画像の設定をしてみました。


BlueCube という名前の DataLayer を新規作成し、5つの BP_Box を入れてみました。

BlueCube DataLayer の "Is Runtime" はとりあえず OFF にしました。


これでゲームスタートすると BP_Box はすべて削除されました。

「(1)DataLayer にない」というのがよく分からなくなりました。

"Is Runtime" の結果で変わるのかなと思いそれぞれで実行しました。

"Unloaded":削除されず
"Loaded":削除されず
"Activated":全て削除

う~ん...普通の結果だと思います。
次の検証です。



BlueCube2 という名前の DataLayer を新規作成し、3つの BP_Box を入れてみました。

BlueCube2 の "Is Runtime" にチェックを入れて同じように確認。

"Unloaded":削除されず
"Loaded":削除されず
"Activated":3つ削除

う~ん......?これも普通の結果だと思います。
ポップアップの説明を正しく理解できていないか、検証の仕方が悪いんだと思いますが、私のスキルでは今の所これが限界でした。


そんな訳で World Partition と通常のレベルが違う扱いになっていることがよく分かりました。

おまけで DataLayer も検証しましたが分からないことが増えただけでしたw

UE5 本当に難しいですね...できることが多く機能もかなりあるので四苦八苦しております;

可能であれば "Is Spatially Loaded" を ON にした状態でもアクタの数を取得できる方法があれば World Partition のメリットを更に利用できるのになあ...と思いました。

是非またチャレンジしたい内容なので
情報が集まったら動画なりで紹介してみようと思います。

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

わんころのUE5勉強会 Dec/04/2022 23:58

【UE5.0.x/UE5.1】Enhanced Input の備忘録(Triggers 編)

UE5.1 で正式に採用されることになった Enhanced Input について初心者ながらに触ったものをまとめたものになります。
そのため、間違ったことを記載している可能性があることをご承知おき下さい。

Enhanced Input の初期設定については省いてます。


UE5.1 では FirstPerson などでプロジェクトを作成すると Enhanced Input が最初から有効になっているため、本記事は UE5.1 + FirstPersonプロジェクトをベースに記載しております。

※UE5.0.x でも利用可能ですが、のちほど記載する Triggers の Combo は UE5.0.x では存在しません。



今回の備忘録ではコンテンツブラウザで右クリック> 入力から
「入力マッピングコンテキスト」と「入力アクション」で利用できる Triggers に絞った内容になります。

その前に「入力アクション」の Value Type だけ見ていきます。


Value Type:


入力するキーがどういう種類の入力かを指定します。

例えば攻撃やジャンプなどの押した離したの入力を取りたい場合は Digital(bool) を利用します。

また、キャラの移動やカメラ移動などの入力は AxisXD を使います。
Axis1D だと1つの入力アクションで1軸、Axis2D だと2軸取れるといった具合です。

UE5.1 のキャラ移動では IA_Move という入力アクションが存在し、「Value Type:Axis2D(Vector2D)」が採用されています。

前後左右で取得する入力の値が違うため
Modifiers にて前後左右の移動を変換(修飾)して利用します。

Triggers / Modifiers については「入力マッピングコンテキスト」でも指定可能です。
(本記事では Modifiers については触れません)


「入力マッピングコンテキスト」とは


キー入力の割り当てや Triggers / Modifiers などの設定を行います。
ここで「入力アクション」を登録し、それに対してどのキーを押せばトリガーされるのかが決定されます。

Triggers


本記事のメイン部分です。
キー入力がトリガーされるタイミングを指定します。
かなり多いですがそれだけ柔軟な入力が取れるようになっています。

分かりやすい順で見ていきます。


Triggers:None


キーを押し続けている間トリガーされ続けます。

画像では IA_Shoot という「入力アクション」を左クリックに割り当て、キーを押している間弾の発射がトリガーされ続けるという挙動です。

恐らく後述する Down と同じ挙動ではないかと思います。


Triggers:Pressed


キーを押した瞬間に1回トリガーされます。

画像では IA_Jump という「入力アクション」をスペースキーに割り当て、押した瞬間に1回ジャンプがトリガーされるという挙動です。


Triggers:Down


キーを押し続けている間トリガーされ続けます。

画像では、左クリックを押し続けている間トリガーされ続けます。
前述の None と同じか、同じような挙動ではないかと思います。


FirstPerson プロジェクトでは弾を発射する際
左クリックするごとに弾を1発ずつ発射します(Pressed)

Down(もしくは None) にすると左クリックを押しっぱなしで弾が連射されるという挙動になります。

発射間隔を空けるようなプロパティはない?ので
少し間隔を空けて発射したい場合は後述の Pulse を利用するといいと思います。


Triggers:Hold


"Hold Time Threshold" で指定した秒数以上キーを押し続けた時にトリガーされ続けます。
上記 Down にトリガーされるまでの時間が追加されたバージョンです。

画像では3秒左クリックを押しっぱなしにするとトリガーされ続けるため弾が連射されるという挙動になります。

"Is One Shot" にチェックを入れると
Hold のトリガー条件を満たした瞬間に1回だけ呼ばれます。
上記の例だと3秒後に1発発射されるという挙動です。


Triggers:Released


キーを離した瞬間に1回トリガーされます。

画像では左クリックを押し、
離したタイミングで1発発射されるという挙動です。


Triggers:Hold And Release


"Hold Time Threshold" で指定した秒数以上キーを押し続けたあと、キーを離した瞬間に1回トリガーされます。

画像では、左クリックを3秒以上押したあとキーを離すと1発発射されるという挙動です。

例えばチャージショットのような何秒以上押して離すような入力が取れるということです。


Triggers:Tap


キーを押したあと "Tap Release Time Threshold" で指定した秒数内にキーを放す離すとトリガーされます。

上記 Released に時間制限がついたようなバージョンです。

画像では、左クリックを押したあと 0.2秒以内にキーを離した時トリガーされます。


Triggers:Pulse


キーを押している間、"Interval" で指定した秒数ごとに1回ずつトリガーされます。

ON> OFF> ON> OFF...という挙動を繰り返し
ON のタイミングでトリガーされるようなイメージです。

"Trigger on Start" にチェックを入れると
キーを押した瞬間に1回トリガーされ、それ以降は "Interval" で指定した秒数が来るごとにトリガーされます。

チェックを外すと "Interval" で指定した秒数が来るまでトリガーされません。
押した瞬間からトリガーしたいかどうかで分かれます。


”Trigger Limit” は、ここで指定した回数のトリガーが発生したらそれ以上トリガーされません。
0を指定すると回数制限はなくなります。

画像では、左クリックを押したタイミングで1発発射し、
2秒おきに弾が3発まで発射されるという挙動です。
(最初に1発> 2秒後に1発> 2秒後に1発で計3発ということです)

例えば銃をフルオートで撃つ際、弾の発射間隔を空けたり ”Trigger Limit” を3にしておくことで3点バーストのような入力が取れるということになります。


Triggers:Chorded Action


少しややこしいトリガーです。
Chorded Action で指定する特定の「入力アクション」がトリガーされており、かつ、この「入力アクション」がトリガーされた場合にトリガーされます。

画像では、IA_Shoot の Triggers に Chorded Action を設定しています。
それに対応する入力アクションが IA_ADS となっており
そこには右クリック+Down が設定されています。

Down は上記の通り押し続けている間トリガーされ続けるので
IA_ADS は右クリックを押し続けている間トリガーされ続けるという事になります。

そして IA_Shoot はそのトリガーが発生していないと左クリックを押してもトリガーされません。

この画像は、FPS でよくあるような右クリックで ADS しながら左クリックで発射のような入力をトリガーできるようにしたものです。

IA_Shoot の Pressed ですが、右クリックを押したまま左クリックを押し続けると連射になるので、1発発射で留めるため使用しています(外せば連射になります)。


Triggers:Combo


UE5.1 より新しく追加された Triggers です。
恐らくこれが一番ややこしい気がします。

まず、黄色枠の所が他と違っていて、この「入力アクション」そのものにはキーの割り当ては出来ません(グレーアウトで操作できなくなっています)

代わりに、画像のピンク枠の部分のように「入力アクション」を設定する必要があります。
"Combo Actions" が配列になっており
"Combo Actions[0]" ~ "Combo Actions[x]" に設定した順番で入力するとトリガーされます。

画像では
Combo Actions[0]:右クリック(IA_ADS)

Combo Actions[1]:左クリック(IA_Shoot)

Combo Actions[2]:左クリック(IA_Shoot)
という順で押すとトリガーされます。

例えばストリートファイターの豪鬼が使う瞬獄殺や
伝説のコナミコマンドのような特定の順番で入力するトリガーを作成することが出来ます。


また、"Time to Press Key" で次のキー入力を受け付ける時間を設定できます。

これはキーを押すごとに次の Combo Actions に設定された "Time to Press Key" 秒以内に入力を完了させないといけないようです。


もう少し具体的に見ていくと、Combo Actions[0] の右クリックを押したタイミングで、次の Combo Actions[1] に設定した "Time to Press Key" 秒以内に入力を完了する必要があります。

そのため、この左クリックは前回の右クリックを押してから1秒以内に入力する必要があります。


更に次の Combo Actions[2] も同様に、設定した "Time to Press Key" 秒以内に入力を完了する必要があります。

そのため、この左クリックは前回の左クリックを押してから1秒以内に入力する必要があります。


Combo の検証1


"Time to Press Key" にマウスオーバーするとこういう説明が出てくるのですが、キーを押すごとに入力完了までのトータル時間が "Time to Press Key" 秒ずつ加算されるのだと勘違いしていました。

そこで疑問が出てきました。
Combo Actions[0] の "Time to Press Key" はどういう扱いなのかです。
簡単にですが下記検証を行いました。


Combo の検証2


Combo Actions[0]:右クリック(IA_ADS)
"Time to Press Key" に3秒を設定。

Combo Actions[1]:左クリック(IA_Shoot)
"Time to Press Key" に0.2秒を設定。

この状態で弾が発射されるタイミングを検証してみると
右クリックを押してから0.2秒以内に左クリックを入力しないとトリガーされませんでした。
もう一つ検証します。


Combo の検証3


先程とほぼ同じですが、Combo Actions[1] の "Time to Press Key" に0秒を設定しました。

この状態で弾が発射されるのか確認しましたがトリガーされませんでした。

右クリックを押してから0秒以内に左クリックを入力しないといけないので、実質入力不可能ということになるでしょうか。


Combo Actions[0] の"Time to Press Key" に0秒を設定しても特に影響はなかったので、ここの値は気にしなくていいのかな...?という結果になりました。


長くなりましたが Enhanced Input に利用されている Triggers の挙動を自分なりにメモしたものを公開してみました。

If you liked this article, support the creator with a tip!

Sending tips requires user registration.Find details about tips here.

5 6 7 8 9 10 11

Search by Article Tags

Monthly Archive

Search by Exclusive Perks

Search Articles