【深入AGMaker】关于AGMaker如何处理Input Action Map的方式介绍

导言

如果在运行时打印所有的Action Map就可以发现AGM为了支持多玩家控制器,会为项目设置中每一个用户创建的Action Map创建若干个以_agm_<controller_id>结尾的代理Action Map,
而所有的GameObject节点所监听的用于移动以及在VS脚本中用作条件的输入,均为附带该特殊后缀的版本。

要点

  1. 在GameObject下创建一个Node类型的节点,将此脚本依附其上
  2. 运行时按下此输入,会发现两个print均被触发
  3. 如果使用Input.parse_input_event或者TouchScreenButton等节点来手动模拟输入发出时,需要自己斟酌决定是否附带_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即为其对应的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!")