You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时切换多个对象的可见性与碰撞属性?

优化多对象可见性与碰撞属性切换的实现方案

方法1:利用节点命名规律循环遍历

你的透镜节点命名是Lens0、Lens1这种有规律的格式,直接用循环批量处理就能替代大量重复的if分支:

func lens_toggle(lens):
    # 遍历所有透镜编号(0到4)
    for i in range(5):
        var lens_node = get_node("Lens" + str(i))
        var collision_shape = lens_node.get_node("StaticBody3D/CollisionShape3D")
        
        # 判断当前遍历的透镜是否为目标透镜
        if i == lens:
            lens_node.show()
            collision_shape.disabled = false
        else:
            lens_node.hide()
            collision_shape.disabled = true

后续如果新增透镜,只需要修改range()里的数字即可,代码维护成本极低。

方法2:使用Godot的组(Groups)功能

先在编辑器里把所有Lens*节点添加到同一个组(比如命名为lenses):

  • 选中单个透镜节点,在右侧检查器的Group面板输入lenses并添加
  • 或批量选中所有透镜节点,一次性完成组添加

然后通过遍历组内节点实现批量控制:

func lens_toggle(lens):
    # 获取组内所有透镜节点
    var all_lenses = get_tree().get_nodes_in_group("lenses")
    
    for lens_node in all_lenses:
        var collision_shape = lens_node.get_node("StaticBody3D/CollisionShape3D")
        # 从节点名称提取编号(比如从"Lens0"得到0)
        var lens_index = int(lens_node.name.replace("Lens", ""))
        
        if lens_index == lens:
            lens_node.show()
            collision_shape.disabled = false
        else:
            lens_node.hide()
            collision_shape.disabled = true

这种方法不依赖节点命名规律,哪怕节点名称不连续也能正常工作,灵活性更高。

方法3:封装单个透镜逻辑(更模块化)

如果每个透镜的结构一致,可把单个透镜(MeshInstance3D + StaticBody3D + CollisionShape3D)做成独立场景(比如Lens.tscn),并在场景根节点挂载脚本封装显示/隐藏逻辑:

# Lens.gd(挂载在透镜场景根节点)
func set_active(is_active: bool):
    show() if is_active else hide()
    $StaticBody3D/CollisionShape3D.disabled = !is_active

然后在父节点脚本里管理这些透镜实例:

# 父节点脚本
var lenses = []

func _ready():
    # 将所有透镜实例存入数组(也可通过组获取)
    lenses = [$Lens0, $Lens1, $Lens2, $Lens3, $Lens4]

func lens_toggle(lens):
    for i in range(lenses.size()):
        lenses[i].set_active(i == lens)

这种方式代码结构更清晰,后期修改透镜逻辑时,只需改动单个场景的脚本,不用修改父节点代码,维护性更好。

关于层(Layers)的说明

层主要用于控制渲染层级和碰撞检测交互范围(比如让特定对象只和某层对象碰撞),但切换层不会直接改变对象可见性或禁用碰撞形状,需要额外代码配合,因此不是当前需求的最优选择。

内容的提问来源于stack exchange,提问作者Mac Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:04:55