虚拟按钮说明

virtual_button.gd (18.5 KB)
※更新于 2026/6/4。
已修正缩放时坐标偏移的问题。

按钮图像示例.zip (2.5 KB)

VirtualButton 是一个附加在 Node2D 上的脚本,用于在用户点击或触摸屏幕上对应的视觉节点时,触发指定的 InputMap 动作。
在 GameObject 端,可以通过输入链接或信号进行检测。

最小化配置步骤
以创建一个名为 jump 的跳跃按钮为例:

  1. 打开项目设置中的 Input Map,添加一个名为 jump 的动作。

  2. 在场景中放置一个 VirtualButton 节点。
    可以添加一个 Node2D 并附加 VirtualButton.gd,或者通过“场景→+按钮”直接创建 VirtualButton。

  3. 准备碰撞检测区域和视觉显示。
    选中 VirtualButton 节点,在检查器的**「引用节点内」**部分,点击“生成并分配默认子节点”按钮。
    (※如果按钮无法操作,请保存项目后重新打开)
    完成后将自动分配以下内容:

  • hitbox_control:名为 ButtonArea 的 Control 节点
  • visual_node:名为 ButtonTexture 的 TextureRect 节点
    此后,ButtonArea 的范围将用于判断点击或触摸,而 ButtonTexture 将作为按钮的视觉显示。
  1. 在 VirtualButton 节点的 input_action_name 中输入 jump。
    这样,当按下此按钮时,就会触发名为 jump 的 InputMap 动作。

  2. 设置视觉纹理。
    在 VirtualButton 节点的 texture_state_normal 中分配默认状态下要显示的纹理。
    若希望在按下时改变外观,可在 texture_state_pressed 中分配另一个纹理。
    若需更改禁用状态的外观,可在 texture_state_disabled 中分配纹理;若不使用,保持为空即可。
    只要 enable_texture_swap 保持为 true,系统将根据按下状态和 is_button_enabled 自动切换纹理。

  3. 在要控制的目标对象的.vs 文件中进行设置。
    完成上述设置后,当鼠标左键点击或触摸 ButtonArea 的范围时,就会触发 jump 动作。

进阶:是否使用信号
若需使用信号,请将 generic_signal 连接到目标 GameObject 的 receive_signal。
如果仅使用 InputMap 即可满足需求,则无需进行信号设置。