导言
如果在运行时打印所有的Action Map就可以发现AGM为了支持多玩家控制器,会为项目设置中每一个用户创建的Action Map创建若干个以_agm_<controller_id>结尾的代理Action Map,
而所有的GameObject节点所监听的用于移动以及在VS脚本中用作条件的输入,均为附带该特殊后缀的版本。
要点
- 在GameObject下创建一个Node类型的节点,将此脚本依附其上
- 运行时按下此输入,会发现两个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即为其对应的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!")