序論
実行時にすべてのAction Mapを印刷すると、AGMはマルチプレイヤーコントローラーをサポートするために、プロジェクト設定の各ユーザーに対して、_agm_<controller_id>で終わる複数の代理Action Mapを作成することがわかります。
また、すべてのGameObjectノードが監視している移動用およびVSスクリプト内で条件として使用される入力は、この特殊な接尾辞が付いたバージョンです。
ポイント
- GameObjectの下にNodeタイプのノードを作成し、このスクリプトをその上にアタッチします。
- 実行時にこの入力を押すと、2つのprintがどちらもトリガーされるのが確認できます。
Input.parse_input_eventやTouchScreenButtonなどのノードを使用して手動で入力をシミュレートする場合は、_agm_<controller_id>接尾辞を付与するかどうかを自分で判断する必要があります。- GameObjectの移動機能とVS内の入力に関連する機能は、agmという特殊な接尾辞を持つinput actionのみを認識します。
- 例:元のAction Mapの名前が
Leftの場合、最初のローカルプレイヤーが関心を持つAction Mapの名前はLeft_agm_0となります。ここで0は、このプレイヤーのcontroller_idが0であることを示します。 - 特定の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!")