当要监测物件与物件之间碰撞时, 就可以用到

物件.Touched:connect( (function(另外一個物件)
...
end)
或者
function function名字 ( 另一個物件)
...
end

物件.Touched:connect(function名字)

例子

删除另一个物品的Script

例如监测物件b碰到物件a时, 物件b就会自动删除

  • 当这一个Script在物件a内
script.Parent.Touched:connect(function(otherpart)
otherpart:destroy() -- 刪除
end)

Kill script

当某一个玩家碰到这一个 Part 时,就会死亡

script.Parent.Touched:connect(function(otherpart)
Humanoid = otherpart.Parent:FindFirstChild("Humanoid") -- 找出碰到的 Part 是不是玩家
if Humanoid then
Humanoid.Health = 0 --殺死
end
end)

Debounce 不接受

触碰Part时会多次进行,因此我们需要Debounce保证Script不会重复进行 例:

script.Parent.Touched:connect(function(otherpart)
Humanoid = otherpart.Parent:FindFirstChild("Humanoid") -- 找出碰到的 Part 是不是玩家
if Humanoid then
Humanoid.Health = Humanoid.Health + 5 --加血
wait(5) -- 以為可以限制加血間隔
end
end)
因为 Touch Event 是可以重复进行,因此 wait(5)并不能限制间隔
local debounce = false --不是進行中
script.Parent.Touched:connect(function(otherpart)
if debounce == false then --Check Event是不是在進行
debounce = true --Function 進行中
Humanoid = otherpart.Parent:FindFirstChild("Humanoid") -- 找出碰到的 Part 是不是玩家
if Humanoid then
Humanoid.Health = Humanoid.Health + 5 --加血
wait(5) -- 限制加血間隔
debounce = false --Function 完結
end
end
end)
Touch Event 虽然可以重复进行,但会检查Variable (Debounce)是或否,因此可以限制Event进行次数

小游戏

1. 你现在是路博士铁路的顾问, 其要求你编写一个列车安全系统(Fixed Block), 当列车驶经时就会将该路段封闭,防止两架列车相撞。

Train.png

你现在只编写B区

  • 当列车到达 B1 时, 就会将B区封锁
  • 当列车完全离开B2时, 就会将B区解锁
  • 当另外一架列车到达B1时就将其停止(已有function stop(Part名字)), 等候区域再次开放, 使用已有 function start(Part名字)今列车可继续运行

列车有以下特微

  • 列车前面有一个Part叫 "Front"
  • 列车后面有一个Part叫 "Back"
物件拦
Instance.png
答案
local occupy = false --知道區域是否關閉
script.Parent.B1.Touched:Connect(function(otherpart)
if otherpart.Name == "Front" then
if occupy == false then --檢查是否新列車
occupy = true --關閉該區域
else
stop(otherpart) --停止列車
while occupy do -- 等候區域再次開放
wait()
end
start(otherpart)
occupy = true -- 此列車繼續運行, 區域再次關閉
end
end
end)

script.Parent.B2.Touched:Connect(function(otherpart)
if otherpart.Name == "Back" then
occupy = false
end
end)

学习更多

Roblox Studio Scripting 教学

Roblox 更新/教学 Facebook

函数 Function

社区内容除另有注明外,均在CC-BY-SA许可协议下提供。