【AGMakerの詳細】AGMakerがInput Action Mapを処理する方法の紹介

序論

実行時にすべてのAction Mapを印刷すると、AGMはマルチプレイヤーコントローラーをサポートするために、プロジェクト設定の各ユーザーに対して、_agm_<controller_id>で終わる複数の代理Action Mapを作成することがわかります。
また、すべてのGameObjectノードが監視している移動用およびVSスクリプト内で条件として使用される入力は、この特殊な接尾辞が付いたバージョンです。

ポイント

  1. GameObjectの下にNodeタイプのノードを作成し、このスクリプトをその上にアタッチします。
  2. 実行時にこの入力を押すと、2つのprintがどちらもトリガーされるのが確認できます。
  3. Input.parse_input_eventTouchScreenButtonなどのノードを使用して手動で入力をシミュレートする場合は、_agm_<controller_id>接尾辞を付与するかどうかを自分で判断する必要があります。
  4. GameObjectの移動機能とVS内の入力に関連する機能は、agmという特殊な接尾辞を持つinput actionのみを認識します。
  5. 例:元のAction Mapの名前がLeftの場合、最初のローカルプレイヤーが関心を持つAction Mapの名前はLeft_agm_0となります。ここで0は、このプレイヤーのcontroller_idが0であることを示します。
  6. 特定のGameObjectのcontroller_idは、そのGameObjectに対応するVariableSettingsノード内にあるcontroller_idという名前の変数の値です。

コア

extends Node

func _input(event: InputEvent) -> void:
    var action_name = "my_action_name"
    # Godot
    if event.is_action_pressed(action_name):
        print(action_name + " pressed!")
    # Game Object Interested
    var controller_id = 0
    var agm_listen = action_name + "_agm_" + str(controller_id)
    if event.is_action_pressed(agm_listen):
        print(agm_listen + " pressed!")