在Roblox Studio中使用Touched函数

我正在编写Roblox Studio中的obby。在这个obby中,我有玩家可以跳上的零件(这些零件大约10乘10个stud)。

我的目标是在玩家站在某个零件上时改变该零件的颜色。

local platform = script.parent

local function changeColor(part)
   local humanoid = part.Parent:FindFirstChild(‘Humanoid’)
   if humanoid then
   part.BrickColor = BrickColor.new(‘Bright red’)
   end
end

local function restoreColor(part)
   local humanoid = part.Parent:FindFirstChild(‘Humanoid’)
   if humanoid then
   part.BrickColor = BrickColor.new(‘Grey’)
   end
end

platform.Touched:connect(changeColor)
platform.TouchEnded:connect(restoreColor)

问题在于,当玩家行走时,零件在红色和灰色之间变换。我希望当玩家站在上面时,该零件的颜色保持为红色。因此,我希望函数检查玩家在过去的0.5秒内是否曾经在这个零件上行走,给予玩家行走而不撤销颜色的时间。这样做正确吗?如果是,我该如何实现?是否可能覆盖Touched函数?

这是它的外观(我稍后更改了代码,包括颜色等...但根本问题仍然存在)

enter image description here

点赞
用户10615396
用户10615396

你可以尝试使用 IsRegion3Empty 函数,它应该更可靠地返回是否有任何玩家直接站在平台上方。它有两个优点:

  1. 它可以被调整为比 TouchedTouchEnded 更不敏感,因为直接接触平台并不是必需的,只要玩家在某个小区域内悬浮在平台上方即可。

  2. 它可以处理多个玩家。如果将 TouchEnded 连接到重置颜色,那么如果两个玩家站在平台上,一个玩家离开时,即使还有一个玩家仍然站在上面,颜色也会被重置。通过检查平台上方区域是否为空,颜色只会在 所有 玩家离开平台时重置。

以上方法将在 任何 部件进入该区域时触发。为了仅限玩家,可以使用 FindPartsInRegion3 函数并检查部件是否具有 Humanoid 父级。

2019-12-30 03:22:02