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

修复后仍触发新错误的问题——Roblox Studio

Roblox击杀分数统计报错修复方案

报错原因分析

你遇到的两个报错根源是变量混淆了IntValue实例和数值本身:

  1. 初始时enemies_killed指向的是StarterGui里的IntValue实例,第一次执行enemies_killed = enemies_killed.Value + 1后,变量变成了数字
  2. 第二次循环时再访问enemies_killed.Value,就会触发“Attempt to index number with 'Value'”;如果没覆盖变量直接加,又会出现“Attempted to add Instance and Number”,因为直接把实例和数字相加了

另外还有两个隐藏问题:

  • 循环会重复触发加分:NPC死亡后每0.1秒就加一次分
  • 修改StarterGui的模板不会同步到玩家的实际界面,应该操作玩家的PlayerGui

修正后的代码

-- 获取NPC的Humanoid,提前缓存避免重复查找
local humanoid = script.Parent:WaitForChild("Humanoid")
-- 标记是否已经统计过击杀,防止重复加分
local hasCounted = false

-- 监听Humanoid的死亡事件,比循环检测更高效
humanoid.Died:Connect(function()
    if hasCounted then return end
    hasCounted = true

    -- 找到击杀该NPC的玩家(如果需要验证击杀者)
    local killer = humanoid:GetLastDamageDealer()
    if not killer or not killer:IsA("Player") then return end

    -- 从玩家的PlayerGui中获取分数控件,而不是StarterGui
    local playerGui = killer.PlayerGui
    local enemiesKilledValue = playerGui:WaitForChild("Enemies Defeated"):WaitForChild("Frame"):WaitForChild("enemydefeatednum"):WaitForChild("enemies_killed")
    
    -- 修改IntValue的Value属性,不要覆盖实例引用
    enemiesKilledValue.Value = enemiesKilledValue.Value + 1
    print("击杀分数更新为:", enemiesKilledValue.Value)
end)

关键改动说明

  • 用Humanoid.Died事件替代循环检测:更高效,不会重复执行
  • 新增hasCounted标记:确保每个NPC只统计一次击杀
  • 从玩家的PlayerGui获取控件:StarterGui是模板,修改它不会影响玩家的实际界面
  • 区分实例和数值:始终通过enemiesKilledValue.Value来访问和修改分数,不覆盖实例引用
  • 增加击杀者验证:确保只有造成致命伤害的玩家才会加分(如果不需要可以去掉这部分)

内容的提问来源于stack exchange,提问作者polarshark123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:32:12