Roblox大亨游戏开发报错:无法分配Name属性,期望字符串却得到实例
解决Roblox大亨游戏报错:Unable to assign property Name. string expected, got Instance
报错原因
报错指向代码第27行:Template.Name = Names,核心问题是类型不匹配:
for i, Names in pairs(WeaponFolder:GetChildren())遍历得到的是WeaponFolder里的实例对象(比如Tool、Model这类Instance)- Instance的
Name属性要求赋值字符串类型,直接把实例对象赋值给它就会触发类型错误。
修正后的代码
local WeaponFolder = game.ReplicatedStorage:FindFirstChild('WeaponsFolder') local MinPrice = 0 local CheapestPrice = math.huge local CheapestWeapon = "" local NextTemplate = {} local DB = false -- 注意:原嵌套循环存在重复遍历问题,若要按价格排序生成列表可参考下方优化方案 for i = 1,#WeaponFolder:GetChildren(),1 do for i, Tools in pairs(WeaponFolder:GetChildren()) do if not script.Parent.ScrollingFrame:FindFirstChild(Tools.Name) then if Tools.Price.Value > MinPrice and Tools.Price.Value < CheapestPrice then CheapestPrice = Tools.Price.Value CheapestWeapon = Tools.Name end end end table.insert(NextTemplate, CheapestWeapon) MinPrice = CheapestPrice CheapestPrice = math.huge end for i, weaponInstance in pairs(WeaponFolder:GetChildren()) do local Template = script.Parent.Template:Clone() Template.Parent = script.Parent.ScrollingFrame -- 修正:赋值实例的Name字符串给Template.Name Template.Name = weaponInstance.Name Template.Visible = true -- 修正:直接通过实例访问ImageLabel,无需重复从文件夹查找 Template.ImageButton.Image = weaponInstance.ImageLabel.Image if not DB then DB = true Template.ImageButton.UIGradient:Destroy() end local ScriptClone = script.Parent.ClickScript:Clone() ScriptClone.Parent = Template.ImageButton end
额外优化建议
- 变量命名规范:把循环里的
Names改成weaponInstance,避免混淆变量类型,提升代码可读性。 - 优化排序逻辑:原嵌套循环会重复遍历武器列表(次数等于武器总数),如果目标是生成按价格从低到高排序的武器列表,建议改用排序函数简化逻辑:
-- 替代原嵌套循环的排序逻辑 local weapons = WeaponFolder:GetChildren() table.sort(weapons, function(a, b) return a.Price.Value < b.Price.Value end) for _, weapon in ipairs(weapons) do table.insert(NextTemplate, weapon.Name) end
内容的提问来源于stack exchange,提问作者Froggo
相关产品推荐
相关产品推荐

