跳转至

GFInputMappingUtility

API Reference / Standard / 类索引

  • 路径:addons/gf/standard/input/runtime/gf_input_mapping_utility.gd
  • 模块:Standard
  • 继承:GFUtility
  • API:public
  • 类别:运行时服务 (runtime_service)
  • 首次版本:3.17.0

资源化输入上下文与动作映射运行时。 负责把 Godot InputEvent 转换为项目定义的抽象动作状态,并支持上下文优先级、 运行时重绑定、动作值查询和一次性触发消费。

成员概览

类型 名称 签名
信号 contexts_changed signal contexts_changed(contexts: Array[GFInputContext])
信号 mappings_changed signal mappings_changed
信号 action_value_changed signal action_value_changed(action_id: StringName, value: Variant)
信号 action_started signal action_started(action_id: StringName, value: Variant)
信号 action_triggered signal action_triggered(action_id: StringName, value: Variant)
信号 action_completed signal action_completed(action_id: StringName, value: Variant)
信号 player_action_value_changed signal player_action_value_changed(player_index: int, action_id: StringName, value: Variant)
信号 player_action_started signal player_action_started(player_index: int, action_id: StringName, value: Variant)
信号 player_action_triggered signal player_action_triggered(player_index: int, action_id: StringName, value: Variant)
信号 player_action_completed signal player_action_completed(player_index: int, action_id: StringName, value: Variant)
方法 init func init() -> void:
方法 dispose func dispose() -> void:
方法 tick func tick(delta: float) -> void:
方法 set_remap_config func set_remap_config(config: GFInputRemapConfig) -> void:
方法 get_remap_config func get_remap_config(create_if_missing: bool = false) -> GFInputRemapConfig:
方法 enable_context func enable_context(context: GFInputContext, priority: int = 0) -> void:
方法 disable_context func disable_context(context: GFInputContext) -> void:
方法 set_enabled_contexts func set_enabled_contexts(contexts: Array[GFInputContext], priority: int = 0) -> void:
方法 clear_contexts func clear_contexts() -> void:
方法 is_context_enabled func is_context_enabled(context: GFInputContext) -> bool:
方法 get_enabled_contexts func get_enabled_contexts() -> Array[GFInputContext]:
方法 handle_input_event func handle_input_event(event: InputEvent) -> void:
方法 create_virtual_source func create_virtual_source( source_id: StringName = &"virtual", player_index: int = -1 ) -> GFVirtualInputSource:
方法 set_virtual_action_value func set_virtual_action_value( action_id: StringName, value: Variant, source_id: StringName = &"virtual", player_index: int = -1 ) -> bool:
方法 clear_virtual_action func clear_virtual_action( action_id: StringName, source_id: StringName = &"virtual", player_index: int = -1 ) -> bool:
方法 clear_virtual_source func clear_virtual_source(source_id: StringName = &"virtual") -> void:
方法 get_virtual_source_snapshot func get_virtual_source_snapshot(source_id: StringName = &"virtual") -> Dictionary:
方法 get_action_value func get_action_value(action_id: StringName) -> Variant:
方法 get_action_vector func get_action_vector(action_id: StringName) -> Vector2:
方法 get_action_vector3 func get_action_vector3(action_id: StringName) -> Vector3:
方法 is_action_active func is_action_active(action_id: StringName) -> bool:
方法 was_action_just_started func was_action_just_started(action_id: StringName) -> bool:
方法 was_action_just_completed func was_action_just_completed(action_id: StringName) -> bool:
方法 get_last_completed_duration func get_last_completed_duration(action_id: StringName) -> float:
方法 consume_action func consume_action(action_id: StringName) -> bool:
方法 get_action_value_for_player func get_action_value_for_player(player_index: int, action_id: StringName) -> Variant:
方法 get_action_vector_for_player func get_action_vector_for_player(player_index: int, action_id: StringName) -> Vector2:
方法 get_action_vector3_for_player func get_action_vector3_for_player(player_index: int, action_id: StringName) -> Vector3:
方法 is_action_active_for_player func is_action_active_for_player(player_index: int, action_id: StringName) -> bool:
方法 was_action_just_started_for_player func was_action_just_started_for_player(player_index: int, action_id: StringName) -> bool:
方法 was_action_just_completed_for_player func was_action_just_completed_for_player(player_index: int, action_id: StringName) -> bool:
方法 get_last_completed_duration_for_player func get_last_completed_duration_for_player(player_index: int, action_id: StringName) -> float:
方法 consume_action_for_player func consume_action_for_player(player_index: int, action_id: StringName) -> bool:
方法 set_binding_override func set_binding_override( context_id: StringName, action_id: StringName, binding_index: int, input_event: InputEvent ) -> void:
方法 unbind func unbind(context_id: StringName, action_id: StringName, binding_index: int) -> void:
方法 clear_binding_override func clear_binding_override(context_id: StringName, action_id: StringName, binding_index: int) -> void:
方法 get_remappable_items func get_remappable_items( context_filter: StringName = &"", display_category_filter: String = "" ) -> Array[Dictionary]:
方法 clear_input_state func clear_input_state() -> void:
方法 clear_player_input_state func clear_player_input_state(player_index: int) -> void:

信号

contexts_changed

  • API:public
signal contexts_changed(contexts: Array[GFInputContext])

启用上下文变化后发出。

参数:

名称 说明
contexts 当前启用上下文,已按运行时处理顺序排序。

结构:

  • contexts: Array[GFInputContext],按有效优先级和激活时间戳排序。

mappings_changed

  • API:public
signal mappings_changed

有效映射变化后发出。

action_value_changed

  • API:public
signal action_value_changed(action_id: StringName, value: Variant)

动作值变化时发出。

参数:

名称 说明
action_id 动作标识。
value 新动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

action_started

  • API:public
signal action_started(action_id: StringName, value: Variant)

动作从非活跃变为活跃时发出。

参数:

名称 说明
action_id 动作标识。
value 激活时的动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

action_triggered

  • API:public
signal action_triggered(action_id: StringName, value: Variant)

动作活跃且收到匹配输入事件时发出。

参数:

名称 说明
action_id 动作标识。
value 当前动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

action_completed

  • API:public
signal action_completed(action_id: StringName, value: Variant)

动作从活跃变为非活跃时发出。

参数:

名称 说明
action_id 动作标识。
value 完成时的动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

player_action_value_changed

  • API:public
signal player_action_value_changed(player_index: int, action_id: StringName, value: Variant)

玩家动作值变化时发出。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。
value 新动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

player_action_started

  • API:public
signal player_action_started(player_index: int, action_id: StringName, value: Variant)

玩家动作从非活跃变为活跃时发出。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。
value 激活时的动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

player_action_triggered

  • API:public
signal player_action_triggered(player_index: int, action_id: StringName, value: Variant)

玩家动作活跃且收到匹配输入事件时发出。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。
value 当前动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

player_action_completed

  • API:public
signal player_action_completed(player_index: int, action_id: StringName, value: Variant)

玩家动作从活跃变为非活跃时发出。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。
value 完成时的动作值。

结构:

  • value: Variant,根据动作值类型使用 bool、float、Vector2 或 Vector3。

方法

init

  • API:public
func init() -> void:

初始化输入映射运行时状态并挂载输入路由节点。

dispose

  • API:public
func dispose() -> void:

释放输入路由节点并清理全部运行时状态。

tick

  • API:public
func tick(delta: float) -> void:

推进运行时逻辑。

参数:

名称 说明
delta 本帧时间增量(秒)。

set_remap_config

  • API:public
func set_remap_config(config: GFInputRemapConfig) -> void:

设置重映射配置。

参数:

名称 说明
config 输入重映射配置;传 null 表示使用默认绑定。

get_remap_config

  • API:public
func get_remap_config(create_if_missing: bool = false) -> GFInputRemapConfig:

获取当前重映射配置。若不存在且 create_if_missing 为 true,会自动创建。

参数:

名称 说明
create_if_missing 是否在缺失时创建。

返回:重映射配置。

enable_context

  • API:public
func enable_context(context: GFInputContext, priority: int = 0) -> void:

启用输入上下文。

参数:

名称 说明
context 输入上下文资源。
priority 优先级,数值越大越先处理。

disable_context

  • API:public
func disable_context(context: GFInputContext) -> void:

禁用输入上下文。

参数:

名称 说明
context 输入上下文资源。

set_enabled_contexts

  • API:public
func set_enabled_contexts(contexts: Array[GFInputContext], priority: int = 0) -> void:

批量替换当前启用的上下文。

参数:

名称 说明
contexts 输入上下文数组。
priority 批量上下文默认优先级;数组越靠后,同优先级下越先处理。

结构:

  • contexts: Array[GFInputContext],作为新的活跃 context 集启用。

clear_contexts

  • API:public
func clear_contexts() -> void:

清空所有启用上下文。

is_context_enabled

  • API:public
func is_context_enabled(context: GFInputContext) -> bool:

检查上下文是否启用。

参数:

名称 说明
context 输入上下文资源。

返回:是否启用。

get_enabled_contexts

  • API:public
func get_enabled_contexts() -> Array[GFInputContext]:

获取已启用上下文,按实际处理顺序返回。

返回:上下文数组。

结构:

  • return: Array[GFInputContext],按有效优先级和激活时间戳排序。

handle_input_event

  • API:public
func handle_input_event(event: InputEvent) -> void:

手动处理输入事件。通常由内部路由节点自动调用,也可用于测试或自定义输入桥接。

参数:

名称 说明
event Godot 输入事件。

create_virtual_source

  • API:public
func create_virtual_source( source_id: StringName = &"virtual", player_index: int = -1 ) -> GFVirtualInputSource:

创建可编程虚拟输入源。

参数:

名称 说明
source_id 虚拟输入源标识。
player_index 玩家索引;小于 0 时只写入全局动作状态。

返回:虚拟输入源。

set_virtual_action_value

  • API:public
func set_virtual_action_value( action_id: StringName, value: Variant, source_id: StringName = &"virtual", player_index: int = -1 ) -> bool:

写入虚拟动作值。

参数:

名称 说明
action_id 动作标识。
value 动作值。
source_id 虚拟输入源标识。
player_index 玩家索引;小于 0 时只写入全局动作状态。

返回:写入成功返回 true。

结构:

  • value: Variant,要转换为动作运行时向量贡献的 bool、float、Vector2 或 Vector3 值。

clear_virtual_action

  • API:public
func clear_virtual_action( action_id: StringName, source_id: StringName = &"virtual", player_index: int = -1 ) -> bool:

清除虚拟动作值。

参数:

名称 说明
action_id 动作标识。
source_id 虚拟输入源标识。
player_index 玩家索引;小于 0 时只清除全局动作状态。

返回:清除成功返回 true。

clear_virtual_source

  • API:public
func clear_virtual_source(source_id: StringName = &"virtual") -> void:

清除指定虚拟输入源的所有动作贡献。

参数:

名称 说明
source_id 虚拟输入源标识。

get_virtual_source_snapshot

  • API:public
func get_virtual_source_snapshot(source_id: StringName = &"virtual") -> Dictionary:

获取虚拟输入源状态快照。

参数:

名称 说明
source_id 虚拟输入源标识。

返回:快照字典。

结构:

  • return: Dictionary,包含 source_id 和 actions: Array[Dictionary],action 条目包含 action_id 与 value。

get_action_value

  • API:public
func get_action_value(action_id: StringName) -> Variant:

获取动作当前值。

参数:

名称 说明
action_id 动作标识。

返回:bool、float、Vector2 或 Vector3,取决于动作值类型。

结构:

  • return: Variant,根据动作值类型返回 bool、float、Vector2、Vector3 或 null。

get_action_vector

  • API:public
func get_action_vector(action_id: StringName) -> Vector2:

获取动作当前二维向量值。

参数:

名称 说明
action_id 动作标识。

返回:二维向量值;三维轴会返回 x/y 分量。

get_action_vector3

  • API:public
func get_action_vector3(action_id: StringName) -> Vector3:

获取动作当前三维向量值。

参数:

名称 说明
action_id 动作标识。

返回:三维向量值;非三维动作的 z 分量为 0。

is_action_active

  • API:public
func is_action_active(action_id: StringName) -> bool:

检查动作是否活跃。

参数:

名称 说明
action_id 动作标识。

返回:是否活跃。

was_action_just_started

  • API:public
func was_action_just_started(action_id: StringName) -> bool:

检查动作是否在当前帧刚刚开始。

参数:

名称 说明
action_id 动作标识。

返回:是否刚开始。

was_action_just_completed

  • API:public
func was_action_just_completed(action_id: StringName) -> bool:

检查动作是否在当前帧刚刚结束。

参数:

名称 说明
action_id 动作标识。

返回:是否刚结束。

get_last_completed_duration

  • API:public
func get_last_completed_duration(action_id: StringName) -> float:

获取动作最近一次结束前的持续活跃时间。

参数:

名称 说明
action_id 动作标识。

返回:持续秒数。

consume_action

  • API:public
func consume_action(action_id: StringName) -> bool:

消费一次刚开始的动作。

参数:

名称 说明
action_id 动作标识。

返回:成功消费返回 true。

get_action_value_for_player

  • API:public
func get_action_value_for_player(player_index: int, action_id: StringName) -> Variant:

获取指定玩家动作当前值。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:bool、float、Vector2 或 Vector3,取决于动作值类型。

结构:

  • return: Variant,根据动作值类型返回 bool、float、Vector2、Vector3 或 null。

get_action_vector_for_player

  • API:public
func get_action_vector_for_player(player_index: int, action_id: StringName) -> Vector2:

获取指定玩家动作当前二维向量值。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:二维向量值;三维轴会返回 x/y 分量。

get_action_vector3_for_player

  • API:public
func get_action_vector3_for_player(player_index: int, action_id: StringName) -> Vector3:

获取指定玩家动作当前三维向量值。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:三维向量值;非三维动作的 z 分量为 0。

is_action_active_for_player

  • API:public
func is_action_active_for_player(player_index: int, action_id: StringName) -> bool:

检查指定玩家动作是否活跃。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:是否活跃。

was_action_just_started_for_player

  • API:public
func was_action_just_started_for_player(player_index: int, action_id: StringName) -> bool:

检查指定玩家动作是否在当前帧刚刚开始。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:是否刚开始。

was_action_just_completed_for_player

  • API:public
func was_action_just_completed_for_player(player_index: int, action_id: StringName) -> bool:

检查指定玩家动作是否在当前帧刚刚结束。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:是否刚结束。

get_last_completed_duration_for_player

  • API:public
func get_last_completed_duration_for_player(player_index: int, action_id: StringName) -> float:

获取指定玩家动作最近一次结束前的持续活跃时间。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:持续秒数。

consume_action_for_player

  • API:public
func consume_action_for_player(player_index: int, action_id: StringName) -> bool:

消费指定玩家的一次刚开始动作。

参数:

名称 说明
player_index 玩家索引。
action_id 动作标识。

返回:成功消费返回 true。

set_binding_override

  • API:public
func set_binding_override( context_id: StringName, action_id: StringName, binding_index: int, input_event: InputEvent ) -> void:

设置某个绑定的运行时覆盖。

参数:

名称 说明
context_id 上下文标识。
action_id 动作标识。
binding_index 绑定索引。
input_event 新输入事件。

unbind

  • API:public
func unbind(context_id: StringName, action_id: StringName, binding_index: int) -> void:

显式解绑某个绑定。

参数:

名称 说明
context_id 上下文标识。
action_id 动作标识。
binding_index 绑定索引。

clear_binding_override

  • API:public
func clear_binding_override(context_id: StringName, action_id: StringName, binding_index: int) -> void:

清除某个绑定覆盖。

参数:

名称 说明
context_id 上下文标识。
action_id 动作标识。
binding_index 绑定索引。

get_remappable_items

  • API:public
func get_remappable_items( context_filter: StringName = &"", display_category_filter: String = "" ) -> Array[Dictionary]:

获取可重绑条目。

参数:

名称 说明
context_filter 可选上下文过滤。
display_category_filter 可选显示分类过滤。

返回:条目字典数组。

结构:

  • return: Array[Dictionary],包含 context、context_id、mapping、action、action_id、binding、binding_index、display_name、display_category 和 event 字段。

clear_input_state

  • API:public
func clear_input_state() -> void:

清空所有动作运行时状态。

clear_player_input_state

  • API:public
func clear_player_input_state(player_index: int) -> void:

清空指定玩家动作运行时状态。

参数:

名称 说明
player_index 玩家索引。