触摸对象后删除并2秒恢复、增加金币功能实现及报错排查
问题分析与修复方案
报错原因
报错attempt to perform arithmetic (add) on string and number是因为你把oyuncuParasi定义成了字符串"Coins",却尝试对它执行加法运算(oyuncuParasi +1),字符串和数字无法直接进行算术操作。
另外原代码还有两个逻辑问题:
- 直接调用
vurus.Parent:Destroy()会彻底删除对象,2秒后无法恢复,应该改用隐藏/禁用的方式替代销毁。 - 没有正确获取玩家的金币数据存储对象,
"Coins"只是属性名称,需要先找到玩家对应的Leaderstats或数据存储实例。
修正后的代码
local WheatAmount = script.Parent local isActive = true -- 替换原duvar变量,语义更清晰 function onTouch(hit) -- 验证触碰者是玩家角色 local player = game.Players:GetPlayerFromCharacter(hit.Parent) if not player or not isActive then return end -- 获取玩家的金币数据(假设金币存在Leaderstats的Coins值中) local leaderstats = player:FindFirstChild("Leaderstats") local coins = leaderstats and leaderstats:FindFirstChild("Coins") if not coins then warn("玩家未找到Coins数据") return end -- 执行核心逻辑 isActive = false coins.Value = coins.Value + 1 -- 正确给金币加1 WheatAmount.Transparency = 1 -- 隐藏对象 WheatAmount.CanCollide = false wait(2) WheatAmount.Transparency = 0 -- 恢复显示 WheatAmount.CanCollide = true isActive = true end script.Parent.Touched:Connect(onTouch) -- 注意Roblox现在推荐用Connect而非connect
关键修改点
- 替换
oyuncuParasi的错误定义:通过GetPlayerFromCharacter获取触碰的玩家,再找到其Leaderstats下的Coins数值对象,操作Value属性完成加法。 - 取消
Destroy()操作:改用修改Transparency(透明度)和CanCollide属性来实现对象的隐藏/恢复,避免对象被彻底删除无法复原。 - 变量语义优化:把
duvar改成isActive,更符合逻辑含义。 - 增加合法性校验:先判断触碰者是否为玩家,再检查金币数据是否存在,避免空引用错误。
内容的提问来源于stack exchange,提问作者robloxDevelopeR
相关产品推荐
相关产品推荐

