尝试用"WaitForChild"索引空值

我正在制作一款游戏,我希望刷出的敌人有血条,和玩家一样有生命值。 我把这个功能赋给了所有角色,但是在第16行,它始终出现错误“尝试用"WaitForChild"索引空值”。(这是一个位于复制品中的模块脚本)

 local Players = game:GetService("Players")
 local health = {}

function health.Setup(model)
    local newHealthBar = script.HealthGui:Clone()
    newHealthBar.Adornee = model:WaitForChild("Head")
    newHealthBar.Parent = Players.LocalPlayer.PlayerGui
   health.UpdateHealth()
    model.Humanoid.HealthChanged:Connect(function()
        health:UpdateHealth(newHealthBar, model)
    end)
end

function health.UpdateHealth(gui, model)
    local humanoid = model:WaitForChild("Humanoid")

    if humanoid and gui then
        local percent = humanoid.Health / humanoid.MaxHealth
        gui.CurrentHealth.Size = UDim2.new(percent, 0, 0.5, 0)
        if humanoid.Health <= 0 then
            gui.Title.Text = model.Name .. "已死亡"
        else
            gui.Title.Text = "生命值:" .. humanoid.Health .. "/" .. humanoid.MaxHealth
        end
    end
end

return health

原文链接 https://stackoverflow.com/questions/71044566

点赞
stackoverflow用户2858170
stackoverflow用户2858170

health.Setup 中,你调用了 health.UpdateHealth(),因此在 health.UpdateHealthguimodel 是空值。

这就是为令 local humanoid = model:WaitForChild("Humanoid") 导致观察到的错误的原因。

如果你不向一个函数提供任何参数,那么它的所有参数都是空值。空值可能无法像 model:WaitForChild("Humanoid") 中那样进行索引,该语法糖是 model["WaitForChild"](model, "Humanoid") 的缩写,其中 model["WaitForChild"] 是索引操作。

2022-02-09 07:51:55