Lua脚本报错修复:如何让触碰球逻辑指向Players而非Workspace
解决Roblox Lua脚本中触碰球体加分的错误问题
报错leaderstats is not a valid member of Model "Workspace.ASWXDYC2"的核心原因是:Touched事件触发时传入的参数是玩家的身体部位实例(比如脚、手),而非Players服务中的玩家对象。你直接通过player.Parent获取到的是Workspace里的玩家模型,这个模型里并不存在leaderstats——leaderstats是存储在Players服务下的玩家实例中的。
修改方案
调整Touched回调的逻辑,通过身体部位找到对应的玩家实例后再操作分数:
local spawned = 0 while true do if spawned >= 5 then break end local RandomNumber1 = math.random(1, 30) local RandomNumber2 = math.random(1, 30) spawned = spawned + 1 wait(3) local PointBall = Instance.new("Part", workspace) PointBall.Size = Vector3.new(1,1,1) PointBall.BrickColor = BrickColor.new("White") PointBall.Material = "Neon" PointBall.Shape = Enum.PartType.Ball -- Makes it a sphere PointBall.Anchored = true -- Anchors the part so it doesn't move PointBall.CanCollide = false -- Makes it so that players can walk through the ball PointBall.Position = Vector3.new(RandomNumber1,3,RandomNumber2) PointBall.Touched:Connect(function(hit) -- 通过触碰部位的父级(玩家模型)找到Players中的玩家实例 local player = game.Players:GetPlayerFromCharacter(hit.Parent) -- 只处理玩家触发的情况,避免其他物体触碰报错 if player then local PlayerPoints = player.leaderstats.Dookie PlayerPoints.Value = PlayerPoints.Value + 1 PointBall:Destroy() end end) end
关键修改说明
- 将回调参数名从
player改为hit,更准确表示触碰的是身体部位 - 使用
game.Players:GetPlayerFromCharacter(hit.Parent)获取Players服务中的玩家对象,这才是存储leaderstats的正确位置 - 增加
if player then的判断,过滤掉非玩家对象(比如场景中的其他部件)触发的事件,避免空值报错 - 修正了变量名拼写错误:
Randombumber改为RandomNumber(规范命名)
内容的提问来源于stack exchange,提问作者Twebs Playz
相关产品推荐
相关产品推荐

