首页 > 解决方案 > 触摸功能 Roblox Studio

问题描述

我正在 Roblox Studio 上编写一个 obby。在这个 obby 中,我有角色跳上的部分(这些部分大约是 10 x 10 个螺柱)。

我想实现这一点,而角色在一部分,那部分会改变颜色。

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 秒内走过它,让玩家有时间行走而不恢复颜色。这是正确的方法吗?如果是,我将如何去做。是否可以覆盖触摸功能?

这是它的样子(我后来稍微更改了代码,包括颜色等......但基本问题仍然存在)

在此处输入图像描述

标签: luaoverridingtouch-eventroblox

解决方案


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

  1. 只要玩家在平台上方的某个小区域内,它就可以调整为比Touched和更不敏感,因为不需要直接接触平台。TouchEnded

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

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


推荐阅读