我正在尝试更改玩家背包中工具的网格纹理

我创建了一个部件,并添加了一个带有检测部件是否被触摸的函数的脚本。如果一个玩家触摸了这个部件,我需要访问该玩家的背包并找到一把工具。在这种情况下,它是一把手枪。然后,我尝试更改手枪网格的 TextureId,这在手枪的 Handle 部分内部

我尝试通过使用 hit.Parent.Backpack 访问玩家的背包,但是当我触摸部件时,控制台上会出现错误消息

Backpack 不是 Accessory 的有效成员

以下是完整的脚本...

function onTouched(hit)
    local player = hit.Parent
    local p = player.Backpack:FindFirstChild("Pistol")
    local h = p:FindFirstChild("Handle")
    local m = h:FindFirstChild("Mesh")
    local id = m.TextureId

    id = "rbxassetid://3707943717"
end

script.Parent.Touched:Connect(onTouched)

预期结果应为:

当玩家触摸此部件时,它应该在玩家的背包中查找一把名为“ Pistol”的工具,然后查找手枪的“网格”,并将网格“TextureId”更改为我在脚本中设置的任何纹理。

点赞
用户8565515
用户8565515

经过更多研究,我成功解决了这个问题。我的第一个错误是hit.Parent似乎只是一个模型,所以我用它来找到“Humanoid”,从那里获取玩家的名称,以便我可以在玩家列表中找到玩家,并访问背包来更改手枪的“Mesh.TextureId”。

以下是新的脚本...

function onTouched(m)
    local p = m.Parent:FindFirstChild("Humanoid")

    if p ~= nil then
        local n = p.Parent.Name
        local player = game.Players:FindFirstChild(n, false) -- 找到碰到零件的玩家。
        local gun = player.Backpack:FindFirstChild("Pistol")

        if player == nil then return end -- 如果出现问题,则退出。

        local handle = gun:FindFirstChild("Handle")
        local mesh = handle.Mesh

        mesh.TextureId = "rbxassetid://3707943717" -- 更改枪械纹理
    end
end

script.Parent.Touched:Connect(onTouched)
2019-09-09 12:42:10