You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:55:08