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

制作游戏Stamina Bar时按LeftShift触发Attempt to call Udim2 value错误求助

问题:制作Stamina Bar时按下LeftShift触发“Attempt to call Udim2 value”错误

错误原因

  1. 参数格式错误(核心问题):调用TweenSize时,UDim2.new()的结果和后续参数之间缺少逗号,Lua会将UDim2对象误认为可调用函数,从而抛出“Attempt to call Udim2 value”错误。比如原代码中:

    script.Parent:TweenSize(UDim2.new(Stamina/ 100, 0, 1, 0) "Out", "Linear", 0)
    

    这里UDim2.new(...)后面直接跟"Out",Lua会解析为UDim2.new(...)( "Out" ),也就是试图调用UDim2对象,这是非法操作。

  2. 拼写错误:

    • charcter → character(玩家角色变量名拼写错误)
    • Humainoid → Humanoid(人形对象拼写错误,会导致无法访问WalkSpeed)
  3. 逻辑漏洞:

    • 用Stamina == 0判断 stamina 耗尽不严谨,浮点运算下数值可能永远不会精确等于0,应该用Stamina <= 0
    • 恢复 stamina 的循环里错误保留了if Stamina == 0的判断,完全不符合逻辑,需要移除

修正后的代码

local player = game.Players.LocalPlayer
local character = player.Character -- 修正拼写

local UserInputService = game:GetService("UserInputService")

local Stamina = 100
local running = false

Stamina = math.clamp(Stamina, 0, 100)

UserInputService.InputBegan:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.LeftShift then
        running = true
        character.Humanoid.WalkSpeed = 22 -- 修正拼写
        while Stamina > 0 and running do
            Stamina = Stamina - 0.6
            Stamina = math.clamp(Stamina, 0, 100) -- 每次修改后都 clamp 防止溢出
            
            -- 修正TweenSize的参数格式,添加逗号分隔
            script.Parent:TweenSize(UDim2.new(Stamina / 100, 0, 1, 0), "Out", "Linear", 0, true)
            
            task.wait() -- 用task.wait()替代wait(),更高效
            if Stamina <= 0 then -- 改用<=判断耗尽
                character.Humanoid.WalkSpeed = 16
            end
        end
    end
end)

UserInputService.InputEnded:Connect(function(input)
    if input.KeyCode == Enum.KeyCode.LeftShift then
        running = false
        character.Humanoid.WalkSpeed = 16 -- 修正拼写
        while Stamina < 100 and not running do
            Stamina = Stamina + 0.5
            Stamina = math.clamp(Stamina, 0, 100) -- 每次修改后clamp
            
            -- 同样修正TweenSize参数格式
            script.Parent:TweenSize(UDim2.new(Stamina / 100, 0, 1, 0), "Out", "Linear", 0, true)
            
            task.wait()
        end
    end
end)

额外优化说明

  • 每次修改Stamina后都调用math.clamp,确保数值始终在0-100范围内,避免溢出
  • 用task.wait()替代旧的wait(),性能更优
  • TweenSize添加最后一个参数true(可选),允许打断之前的动画,让 stamina 条的变化更流畅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:20:29