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

Roblox撞房得币脚本报错Attempt to call an instance value 求助

Roblox脚本报错分析:Attempt to call an instance value

我正在制作一款Roblox游戏,玩法为驾驶车辆撞击由部件组成的房屋,当车辆前部的部件碰撞到otherPart时,将该otherPart的Anchored属性设置为false(取消锚定)。我编写脚本试图实现当otherPart取消锚定时,为玩家增加1枚coins,但第9行持续出现错误"Attempt to call an instance value",请帮忙分析问题原因。

报错截图:
Coding error image

脚本代码:

local HitPart = script.Parent
local function onPartTouched(otherPart)
    local Player = otherPart.Parent
    otherPart.Anchored = false
    Player(otherPart.Parent).leaderstats.coins.Value =  Player(otherPart.Parent).leaderstats.coins.Value + 1
end
HitPart.Touched:Connect(onPartTouched)

问题原因分析

  • 直接触发报错的原因:第5行的Player(otherPart.Parent)写法错误。你已经将otherPart.Parent赋值给了Player变量,但这里却把Player这个Instance对象当作函数来调用,传入otherPart.Parent作为参数。Instance对象不能被当作函数调用,这就导致了"Attempt to call an instance value"错误。
  • 隐藏逻辑问题:otherPart.Parent不一定是玩家的角色对象——房屋部件的父级通常是房屋模型,直接把它赋值给Player变量,后续访问leaderstats时必然会出错。

修正后的脚本

local HitPart = script.Parent
local Players = game:GetService("Players")

local function onPartTouched(otherPart)
    -- 取消部件锚定
    otherPart.Anchored = false

    -- 从部件所属角色中获取玩家对象
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)

    -- 确保玩家、leaderstats和coins都存在时,再执行增加操作
    if player and player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("coins") then
        player.leaderstats.coins.Value += 1
    end
end

HitPart.Touched:Connect(onPartTouched)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:36:31