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

如何在Roblox的Touched函数中获取触发碰撞的闸门名称?

如何在Roblox的Touched事件里知道是哪个闸门被小球碰撞了

嘿,我明白你的需求啦——现在你的脚本能检测到小球碰闸门,但分不清是蓝色还是红色的对吧?问题出在你当前的goal函数里,没法拿到触发碰撞事件的那个闸门实例,因为Touched事件默认只给你碰撞的对象(也就是小球hitter)。给你两种简单好用的解决办法:

方法1:用闭包把闸门实例传进函数

这种方法很直观,绑定事件的时候用匿名函数把对应的闸门对象传给goal,这样函数里就能直接知道是哪个闸门触发的:

function goal(gate, hitter)
    if hitter.Name == "ball" then
        print("触发碰撞的闸门:", gate.Name)
        print("撞到闸门的小球:", hitter.Name)
        print("=============")
    end
end

-- 给蓝色闸门绑定事件,把gate_blue实例传进去
game.Workspace.gate_blue.Touched:Connect(function(hit)
    goal(game.Workspace.gate_blue, hit)
end)

-- 红色闸门同理
game.Workspace.gate_red.Touched:Connect(function(hit)
    goal(game.Workspace.gate_red, hit)
end)

方法2:利用Roblox事件的隐式self参数

Roblox里用:Connect()绑定事件时,回调函数的第一个参数其实就是触发事件的那个实例(也就是闸门本身),只要你把函数定义加上这个参数就行:

-- 第一个参数self就是触发碰撞的闸门
function goal(self, hitter)
    if hitter.Name == "ball" then
        print("触发碰撞的闸门:", self.Name)
        print("撞到闸门的小球:", hitter.Name)
        print("=============")
    end
end

-- 直接用:Connect绑定,self会自动传进函数
game.Workspace.gate_blue.Touched:Connect(goal)
game.Workspace.gate_red.Touched:Connect(goal)

顺便提一下你原来代码的小问题

你之前写的print(Instance.Parent)是不对的,Instance是Roblox所有对象的基类,不是当前触发事件的那个闸门,所以根本拿不到你要的信息。用上面两种方法就能准确获取闸门的名称啦。

另外如果你的小球是个模型(不是单个部件),可以改成判断hitter.Parent.Name == "ball",这样能避免只碰到模型的某个部件时误判的情况哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:07:42