[カスタム条件] Baz入力条件

BazInputCondition

ゲームオブジェクト向けのアナログ対応入力条件。ジョypadのスティック、トリガー、デッドゾーンを読み取り、状態をまたいで維持される入力バッファリング(ジャンプバッファリングがそのまま機能する)もサポートします。3つのモード、1つのファイル、オートロード不要、プラグイン不要、プロジェクト設定の変更も不要です。

私の活動を支えていただくには、パトロンになることを検討してください。:folded_hands:

ダウンロード:
v1.2:
BazInputCondition.gd (32.1 KB)

:warning: このアップデートにより、以前のBazInputConditionリソースは互換性がなくなります。AGM入力の性質上、必要な設計変更です。以前のバージョンでローカルマルチプレイヤー設定でうまく動作しないとお感じの場合は、このバージョンが必要です。

  • 2つのモードに統合:SingleとMovement。 Stick / Vectorモードは廃止されました。各方向が独自のキーを読み取るため、スティック、キーボード、Dパッドがすべて同じ挙動になります。ファイルサイズが小さくなり、インスペクターがすっきりしました。
  • Movementモードでのカスタムキー。 新しいSourceフィールド(MoveAndJumpSetting Keys / Custom Keys)で、独自の4つのキーを選択できます。特定の方向をスキップする場合は、そのフィールドを空のままにしてください。
  • デッドゾーン有効化トグル。 デフォルトはオフで、ボタンやキーは0/1のまま維持されます。スティックやトリガーが入力を駆動する場合にオンにし、デッドゾーンスライダーが閾値として機能します。
  • 両モードで4つのタイミングをすべて使用可能。 Pressed、Just Pressed、Released、Just Releasedがどこでも利用可能になり、「停止中は4方向すべてが解放されている」という判定が正常に動作します。以前はスティックは保持中のみとして扱われていました。
  • Any Key / All Keys。 チェックされた方向とTriggered Whenを組み合わせて使用します。Any Keyはどれか1つで発動し、All Keysはそれらを同時に押している必要があります(例:斜め移動のためのUp + Right)。これは従来の8方向デッドゾーンに取って代わるものです。

v1.1:
BazInputCondition.gd (37.1 KB)

  • MovementおよびStickモードでアナログスティックの検出が可能に。 これらのモードは、ランタイム時に各オブジェクトのプレイヤー固有の入力セットを読み取るため、移動キーがスティック軸に直接バインドされていない場合でも、左スティックが正しく認識されます。(以前は、Movement / Stickモードでスティックが「無効」として読み取られることがありました。)
  • マルチプレイヤー対応。 Single、Movement、Stickのすべてが、操作しているプレイヤーの固有の入力(オブジェクトのplayer_idから取得)に解決されるため、各プレイヤーは自分のコントローラーにのみ反応します。自動で設定不要です。プレイヤー1〜4に対応しています。
  • Movementモードでラジアル(円形)デッドゾーンを採用。 斜め入力は直線入力と同じように扱われます:デッドゾーンを0.9に設定しても、完全な斜め押しでもトリガーされます。方向は8方向バンドで選択されます(斜め押しをすると、隣接する2方向が点灯します)。キーボードとDパッドは従来通り動作します。
  • **「解放済み / 静止状態」のチェックで、完全な斜め押しを「解放済み」と誤認しなくなりました。

v1.0:
BazInputCondition.gd (29.6 KB)

要件

AGMaker 1.3.0以降

インストール

  1. BazInputCondition.gd(以下に添付)をダウンロードします。
  2. プロジェクトのcustom_conditions/フォルダに配置します。このフォルダが存在しない場合は、プロジェクトルートに作成してください。custom_conditions/input/のようなサブフォルダでも問題ありません。
  3. 完了です。Add ConditionダイアログのInput / 入力グループに表示されます。有効化する必要はありません。

機能

AGMakerの標準的なInput条件を、アナログ対応の完全な機能に置き換えます。

  • 3つのモード: Single Input(1つのキー)、Movement(オブジェクトのMove & Jump Settingsからの方向)、Stick / Vector(アナログスティック全体)。
  • 4つのタイミング: Pressed、Just Pressed、Released、Just Released。
  • 1つのデッドゾーン: アナログスティックとトリガー用の単一の閾値。通常のボタンは0/1として読み取られるため、デッドゾーンは影響しません。
  • Movementオプション: Any Direction(任意の方向)、またはSpecific Directions(Up/Down/Left/Right)をAny of these(いずれか)またはAll of these(すべて同時に)と組み合わせて使用します。各オブジェクトのMove & Jump Settingsで設定されたキーに従います。
  • Stick / Vectorオプション: Pushed(任意の方向でデッドゾーンを超えた押し込み)またはAiming Toward Angle(許容範囲内で特定の角度を向いている場合)。
  • Accept Frame Count: 状態をまたいで機能する入力バッファリングウィンドウ。ジャンプバッファリングがそのまま機能します。

使用方法

遷移に条件を追加し、Input Modeを設定します。フィールドはそれに合わせて更新されます:

  • Single InputInput Key(A, B, arrow_up, …)→ DeadzoneInput Method
  • MovementMovement Check(Any Direction / Specific Directions)→ DeadzoneInput Method
  • Stick / VectorStick Check(Pushed / Aiming Toward Angle)→ DeadzoneInput Method

各フィールドの説明:

  • Input Method はタイミングです:Pressed(保持中)、Just Pressed(押下されたフレーム)、Released(解放済み)、Just Released(解放されたフレーム)。
  • Deadzone は、スティックやトリガーがカウントされるために押し込まれる距離(0〜1)です。通常のボタンは無視します。
  • Accept Frame Count(Justタイミングで表示)は、Nフレームの間、押下を記憶します。これにより、遷移が少し遅れても入力を許可できます(例:着地直前にジャンプを押す)。状態変更をまたいで機能します。

ヒント

  • デッドゾーンはアナログ入力にのみ影響します。 ボタンは0/1として読み取られるため、デッドゾーンは影響しません。
  • 入力の解放(Released / Just Released)は、デッドゾーンを小さく設定すると最も効果的です。 「解放済み」のチェックは、スティックがデッドゾーン以下にある場合にtrueとなります。デッドゾーンが大きいと、押し続けているにもかかわらず「解放済み」と判定されてしまいます。Pressed(開始)とReleased(停止)をペアにする場合は、ReleasedのデッドゾーンをPressedのデッドゾーンより小さく設定してください。この2つの閾値の間のギャップがバッファとして機能し、スティックが閾値付近で静止している際の入力のオン/オフのちらつきを防ぎます。
  • Movementの方向は、各オブジェクトのMove & Jump Settingsから取得されます。 それがないオブジェクトは、矢印キーにフォールバックします。
  • Stick / Vectorは、現時点で保持中のタイミング(PressedおよびReleased)をサポートしています。
「いいね!」 6

いつも私を驚かせてくれますね、

このプラグインは、AGMのマップ入力におけるデッドゾーンが無効になる問題を非常に良く解決しています。baz氏に心から感謝します!

PS4コントローラーで3つの異なる入力方法をテストしました。1つ目のデッドゾーンが効くようになり、ジョイスティックをより多くの角度までスライドさせてから串キー(同時押し)を有効にすることができました。

2つ目と3つ目の操作方法は、まだ理解できていません。
AGM内の元のジョイスティックマッピングを削除してみましたが、ジョイスティックで移動判定を行うことはできませんでした。

試してくださってありがとうございます!

本日、以下の機能を変更したアップデート(v1.1)をリリースしました:

  • アナログスティックが「移動」と「スティック」モードで検出されるようになりました。 これらのモードは、実行時に各オブジェクトのプレイヤーごとの入力設定を直接読み取るため、移動キーがスティック軸に直接割り当てられていなくても、左スティックが認識されます。(従来は、移動/スティックモードでスティックが「無効」として認識される場合がありました。)
  • マルチプレイヤー対応。 シングル、移動、スティックはすべて、操作しているプレイヤーの入力(オブジェクトの player_id から取得)に解決されるため、各プレイヤーは自分のコントローラーにのみ反応します。自動で設定不要です。プレイヤー1~4に対応しています。
  • 移動にラウンド(円形)デッドゾーンが採用されました。 斜め押しも直線押しと同様に扱われます。デッドゾーンを0.9に設定しても、斜め入力が完全にトリガーされます。方向の判定は8方向バンド方式で行われ、斜め押しでは両隣の方向が同時に点灯します。キーボードとDパッドの動作は従来どおりです。
  • **「リリース/静止」の判定が、完全な斜め入力を「リリース」と誤認しなくなりました。」

ワオ、マルチコントローラー対応って超かっこいいね!

v1.1を上書きインストールしてテストしてみたんだけど、
どうやら画面に何も変化がないみたい。モバイルモードで円形(ラジアル)デッドゾーンが見当たらないんだけど?

モバイルモードとジョイパッドモードはどちらも操作できないまま。自分の操作ミスかもしれないから、もう少し探ってみるよ。

確認ですが、MoveAndJumpSettingsでスティック入力が移動入力に割り当てられていますか?

MoveAndJumpSettings では左右しか設定されておらず、上下が設定されていません。:flushed_face:
上下を設定しなかったのは、横スクロールゲームだったためで、上下を設定すると上下の移動値をすべて0に変更する必要があったからです。

おそらくそれが認識できない原因だったのでしょう。ご指摘ありがとうございます!

あ、そのシナリオは考えてなかった!機会があれば、MoveAndJumpSettings に依存しないように再設計しようかな。それまでは少なくとも動作させる方法があるので、これであなたの投稿にあるワークアラウンドを理解してもらえるよ。

左/右のみをチェックすれば同じように動作したのかと疑問に思う。

私は効果があると思いますし、非常に論理的です。

おっしゃる通り、複数の実行可能な案を提示していただき、現在はキー割り当てでデッドゾーンを設定することで、スティックに望む判定領域を持たせることができて非常に満足しています。コミュニティのために尽力してくださった baz さんに感謝します!!!

v1.2に更新

  • AGMの入力、特にローカル協力プレイ設定と完全に互換性を持つために必要な、デザインの一括変更。
  • AGMの入力処理方法を100%忠実に再現しています。
  • IMO、理解しやすくなりました。
  • すでに作成した条件を再設定する必要があるかもしれません。