[深入AGMaker] AGMaker如何处理输入动作映射的介绍

简介

如果在运行时打印所有操作映射(Action Maps),您会发现 AGM 为了支持多玩家控制器,会为项目设置中每个用户创建的操作映射生成多个带有后缀 _agm_<controller_id> 的代理操作映射。所有监听移动并在 VS 脚本中使用输入作为条件的 GameObject 节点,都是带有此特殊后缀的版本。

关键点

  1. 在 GameObject 下创建一个 Node 类型的节点,并将此脚本附加到该节点上。
  2. 在运行时按下此输入时,您会发现两个打印语句都会被触发。
  3. 如果您使用 Input.parse_input_eventTouchScreenButton 等节点手动模拟输入事件,则需要自行决定是否包含 _agm_<controller_id> 后缀。
  4. GameObject 的移动函数以及 VS 中与输入相关的函数仅关注带有 agm 特殊后缀的输入动作。
  5. 示例:如果原始操作映射名称为 Left,则第一位本地玩家所关注的操作映射名称为 Left_agm_0,其中 0 代表该玩家的 controller_id
  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!")
1 个赞