LocalScript触发的GUI对所有玩家可见,如何修复为仅本地玩家可见
问题原因
- 你当前的代码仅校验了碰撞对象名称为
Right Leg,没有校验该碰撞体所属的角色是否为当前本地玩家控制的角色。只要任意玩家触碰该部件,所有客户端运行的同名LocalScript都会触发对应GUI显示逻辑,因此所有玩家都会看到GUI。
修复方案
修复后代码如下:
local Players = game:GetService("Players") local prnt = script.Parent -- 获取当前本地玩家 local localPlayer = Players.LocalPlayer -- 防重复触发防抖标记 local debounce = false game.Workspace.TeamChoose.Silents.Touched:Connect(function(hit) -- 同时校验防抖状态、碰撞体名称、碰撞体所属角色是否为本地玩家角色 if not debounce and hit.Name == "Right Leg" and hit.Parent == localPlayer.Character then debounce = true prnt.Visible = true prnt.Silents.Visible = true prnt.Phantoms.Visible = false -- 1秒后重置防抖,可根据实际需求调整时长 task.wait(1) debounce = false end end)
改动说明
- 新增本地玩家获取逻辑,碰撞触发时额外校验碰撞体所属角色是否为本地玩家控制的角色,确保只有触发碰撞的本地玩家才会执行GUI显示逻辑
- 新增防抖逻辑,避免单次触碰多次触发事件导致的异常
内容的提问来源于stack exchange,提问作者TemoF AYC
相关产品推荐
相关产品推荐

