virtual_button.gd (18.5 KB)
※更新于 2026/6/4。
已修正缩放时坐标偏移的问题。
按钮图像示例.zip (2.5 KB)
VirtualButton 是一个附加在 Node2D 上的脚本,用于在用户点击或触摸屏幕上对应的视觉节点时,触发指定的 InputMap 动作。
在 GameObject 端,可以通过输入链接或信号进行检测。
最小化配置步骤
以创建一个名为 jump 的跳跃按钮为例:
-
打开项目设置中的 Input Map,添加一个名为 jump 的动作。
-
在场景中放置一个 VirtualButton 节点。
可以添加一个 Node2D 并附加 VirtualButton.gd,或者通过“场景→+按钮”直接创建 VirtualButton。 -
准备碰撞检测区域和视觉显示。
选中 VirtualButton 节点,在检查器的**「引用节点内」**部分,点击“生成并分配默认子节点”按钮。
(※如果按钮无法操作,请保存项目后重新打开)
完成后将自动分配以下内容:
- hitbox_control:名为 ButtonArea 的 Control 节点
- visual_node:名为 ButtonTexture 的 TextureRect 节点
此后,ButtonArea 的范围将用于判断点击或触摸,而 ButtonTexture 将作为按钮的视觉显示。
-
在 VirtualButton 节点的 input_action_name 中输入 jump。
这样,当按下此按钮时,就会触发名为 jump 的 InputMap 动作。 -
设置视觉纹理。
在 VirtualButton 节点的 texture_state_normal 中分配默认状态下要显示的纹理。
若希望在按下时改变外观,可在 texture_state_pressed 中分配另一个纹理。
若需更改禁用状态的外观,可在 texture_state_disabled 中分配纹理;若不使用,保持为空即可。
只要 enable_texture_swap 保持为 true,系统将根据按下状态和 is_button_enabled 自动切换纹理。
-
在要控制的目标对象的.vs 文件中进行设置。
完成上述设置后,当鼠标左键点击或触摸 ButtonArea 的范围时,就会触发 jump 动作。
进阶:是否使用信号
若需使用信号,请将 generic_signal 连接到目标 GameObject 的 receive_signal。
如果仅使用 InputMap 即可满足需求,则无需进行信号设置。
