Godot引擎中如何检测自定义形状是否被鼠标点击?
你的实现思路是完全可行的,Area2D配合自定义形状的CollisionPolygon2D是Godot中检测不规则2D区域点击的标准方案,功能未生效可按以下步骤逐一排查:
- 确认信号绑定正确:Area2D或者其子节点CollisionPolygon2D的
input_event信号已经绑定到上述脚本的对应函数上,绑定过程中没有修改函数名导致无法触发。 - 检查节点属性配置:确保Area2D的
monitoring、input_pickable(Godot 4.x对应pickable)属性为开启状态,CollisionPolygon2D的disabled属性未勾选,碰撞多边形顶点完全覆盖你需要检测的钢琴键区域、没有位置错位。 - 排除节点遮挡:如果场景中存在优先级更高的Control类节点、或者其他可拾取的2D节点覆盖在当前钢琴键区域上方,会拦截点击事件导致信号无法触发,可临时隐藏上层节点测试。
- 核对节点路径:先注释代码中控制
RadioCPressed显示隐藏的逻辑,只保留print输出,测试点击时控制台是否有对应打印,如果有输出说明信号触发正常,问题出在RadioCPressed的节点路径填写错误。
可参考优化后的代码,避免误响应其他鼠标按键:
# Godot 4.x 版本 func _on_area_2d_input_event(viewport, event, shape_idx): if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: if event.is_pressed(): print("Object Clicked") $"RadioCPressed".show() else: $"RadioCPressed".hide()
如果是Godot 3.x版本,将MOUSE_BUTTON_LEFT替换为BUTTON_LEFT即可。
内容的提问来源于stack exchange,提问作者FreddieLumsden
相关产品推荐
相关产品推荐

