代码之家  ›  专栏  ›  技术社区  ›  Lukas Raby

Clone()在将其父级设置为StarterPack时似乎不起作用

  •  0
  • Lukas Raby  · 技术社区  · 10 月前

    我有一个本地脚本,当我调用其中的函数并提供项目的名称作为参数时,它应该将项目添加到玩家的StarterPack中。

    local replicatedStorage = game:GetService("ReplicatedStorage")
    local assets = replicatedStorage:WaitForChild("Assets")
    local player = game.Players.LocalPlayer
    
    
    local function addItem(itemName)
    
        local item = assets:FindFirstChild(itemName)
        
        if not item then return end
        
        print(item)
        print("Adding "..itemName.." to backpack!")
        
        item:Clone().Parent = player.Backpack
    
    end
    

    我试着更换 item:Clone().Parent = player.Backpack 与此:

        local clone = item:Clone()
        clone.Parent = player.Backpack
    

    这也不会将该项目添加到StarterPack中。

    没有错误或警告。如你所见,我放了一些 print() 这里和那里的函数是它们打印的内容:

    布衣-从 print(item)

    往背包里加布衣!——来自其他印刷品

    布裤子——从 打印(项目)

    将布裤添加到背包中!--来自其他印刷品

    (该函数在游戏开始时被调用两次,每次调用库存中的每个项目一次)

    因此,如果代码正在生成,我不确定为什么这些项目没有被放入StarterPack Clone() 函数和项目名称正确。

    1 回复  |  直到 10 月前
        1
  •  0
  •   Anerdw    10 月前

    此脚本的一个问题是,它将物品添加到玩家的背包中,而不是他们的入门装备中。只要玩家出生,背包就会被清除,而StarterGear则是持久的(请参阅 Backpack docs ).

    另一个问题是,您的代码似乎是在LocalScript上执行的,这通常只适用于处理仅客户端对象(请参阅 LocalScript docs ). 您应该在ServerScriptService中的常规脚本上运行它。

    以下脚本将在每个玩家加入游戏时向其StarterGear添加一个名为“tool”的工具:

    local replicatedStorage = game:GetService("ReplicatedStorage")
    local assets = replicatedStorage:WaitForChild("Assets")
    
    local function addItem(player, itemName)
        local item = assets:FindFirstChild(itemName)
    
        if not item then return end
    
        item:Clone().Parent = player:WaitForChild("StarterGear")
    end
    
    game:GetService("Players").PlayerAdded:Connect(function(player) addItem(player, "Tool") end)
    

    (当然,只需将 Tool 放入StarterPack文件夹。)

    推荐文章