Roblox脚本故障:排行榜与关卡数不显示,报错求修复
修复后的Roblox关卡Checkpoint脚本
错误原因分析
- 排行榜不显示:
leaderstats文件夹名称不符合Roblox要求,必须是全小写的"leaderstats",你脚本中写的是"leaderStats"(大写S),导致客户端无法识别为排行榜容器。 - 报错
attempt to index nil with 'leaderstats':Touched事件触发时,part.Parent可能不是玩家角色(比如场景中其他部件碰撞),此时Players:GetPlayerFromCharacter(part.Parent)返回nil,直接访问player.leaderstats就会触发空值索引错误。 - 重生位置随机:脚本未添加玩家重生点更新逻辑,所以重生时默认使用地图初始出生点。
修复后的完整脚本
local Players = game:GetService("Players") local CheckpointsFolder = game.Workspace.CheckPoints -- 玩家加入时创建正确的排行榜与关卡数据 Players.PlayerAdded:Connect(function(player) -- 注意:leaderstats必须全小写,否则客户端不显示排行榜 local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local Stage = Instance.new("IntValue") Stage.Name = "Stage" Stage.Value = 0 -- 初始化关卡为0,确保第一个Checkpoint能触发更新 Stage.Parent = leaderstats -- 监听玩家重生,自动传送至对应关卡的Checkpoint player.CharacterAdded:Connect(function(character) local stageValue = player.leaderstats.Stage local targetCheckpoint = CheckpointsFolder:FindFirstChild(tostring(stageValue.Value)) if targetCheckpoint and targetCheckpoint:IsA("BasePart") then -- 重生位置设为Checkpoint上方3单位,避免模型卡入地面 character:WaitForChild("HumanoidRootPart").CFrame = targetCheckpoint.CFrame + Vector3.new(0, 3, 0) end end) end) -- 绑定所有Checkpoint的触摸事件 for _, v in pairs(CheckpointsFolder:GetChildren()) do if v:IsA("BasePart") then local checkpointStage = tonumber(v.Name) -- 验证Checkpoint名称为有效数字,过滤无效关卡 if checkpointStage then v.Touched:Connect(function(part) local player = Players:GetPlayerFromCharacter(part.Parent) -- 先判断玩家存在,再执行后续逻辑 if not player then return end local stageValue = player.leaderstats:FindFirstChild("Stage") -- 确保关卡值存在,且当前关卡低于Checkpoint对应关卡 if stageValue and stageValue.Value < checkpointStage then stageValue.Value = checkpointStage end end) end end end
关键修复点说明
- 修正排行榜命名:将
leaderStats改为全小写的leaderstats,满足Roblox显示排行榜的硬性规则。 - 空值安全防护:在
Touched事件中先判断玩家对象是否存在,再访问leaderstats;同时用FindFirstChild获取关卡值,避免直接索引空对象。 - 重生逻辑补充:添加
CharacterAdded监听,玩家重生时自动将角色传送到当前关卡对应的Checkpoint位置,解决重生随机的问题。 - 关卡有效性校验:提前验证Checkpoint的名称为有效数字,避免处理名称非法的无效Checkpoint。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

