简介
如果在运行时打印所有操作映射(Action Maps),您会发现 AGM 为了支持多玩家控制器,会为项目设置中每个用户创建的操作映射生成多个带有后缀 _agm_<controller_id> 的代理操作映射。所有监听移动并在 VS 脚本中使用输入作为条件的 GameObject 节点,都是带有此特殊后缀的版本。
关键点
- 在 GameObject 下创建一个 Node 类型的节点,并将此脚本附加到该节点上。
- 在运行时按下此输入时,您会发现两个打印语句都会被触发。
- 如果您使用
Input.parse_input_event或TouchScreenButton等节点手动模拟输入事件,则需要自行决定是否包含_agm_<controller_id>后缀。 - GameObject 的移动函数以及 VS 中与输入相关的函数仅关注带有 agm 特殊后缀的输入动作。
- 示例:如果原始操作映射名称为
Left,则第一位本地玩家所关注的操作映射名称为Left_agm_0,其中 0 代表该玩家的controller_id。 - 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!")