收集物品

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

创建排行榜后,玩家需要有什么收集。为此,您需要创建玩家在世界中找到的3D物品。以下是玩家收集物品的视频。

构建一个物品

体验中的物品是玩家使用工具收集的 3D 模型。每个物品在收集后会消失,然后在有限时间后重新出现。

对于物品,请参阅你的游戏设计文档。此系列使用水晶作为示例。

  1. 创建一个对象,使用零件或用户在市场中找到的对象。

    如果需要,请使用此连接下载水晶部分。要添加它,请在工作区上单击并选择 从文件中插入

  2. 如果您使用您自己的零件,将所有零件组成一个 模型 。 一种方法是选择所有项目,右击零件,然后选择 。 这将创建一个组织您零件的模型。

  3. 请确保零件都是 锚定

  4. 因此,当项目不可见时,它们不能被收获,创建一个名为 CanHarvest 的 数据值 来跟踪其状态。

  5. 在CanHarvest的属性中,检查 字方块。检查值字段使Boolean的真实,这意味着玩家可以收获该物品。

创建工具

玩家需要有像斧头或铲子等的东西来收集物品。在 Roblox 中,玩家可以装备和使用的物品称为“工具”。 此课程使用初始工具,包含所有部件,并且已经做好动画,以便您后来可以自定义。

添加工具

玩家使用新手工具,下载并放置在 StarterPack 中。

  1. 下载下面的新手工具。

  2. 在 Explorer 中,在 Workspace 下,右击 StarterPack。然后,选择 从工作间件中插入

  3. 选择下载的文件,starterTool.rbxm

  4. 测试您的项目。玩家应该很快就会装备该工具。在游戏中,按下 1 来装备或收起工具。 单击左键以挥舞它。

编写工具

如果工具击中可以收获的对象,玩家的背包里有足够的空间,玩家的物品数增加 1 个在排行榜上。收获物品会让其在几秒内消失,然后在几秒内变成无法收获的,再次出现。这鼓励玩家探索,而不是单击相同的物品。

设置脚本

在此时,将脚本添加到工具。 此脚本处理工具触摸到可收获对象时发生的事件。

  1. 在 StarterPack 中,在 StarterTool 下,添加一个名为 ToolScript 的新脚本。

  2. 在脚本中,在顶部写一个描述性评论,然后创建变量来存储工具零件和工具本身。


    -- 当玩家触摸到可以收获的部分时,给玩家物品
    local tool = script.Parent
    local toolPart = tool.Handle

检查项目

每次工具触摸对象时,它检查该对象是否拥有 CanHarvest 内部,并且设置Boolean 为“True”。

  1. 创建一个名为 onTouch() 的新函数,并且在参数 partTouched 中命名。


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. 在该函数中,创建一个名为 canHarvest 的本地变量。然后使用 FindFirstChild() 函数来查看父级是否存在 CanHarvest Boolean。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    end
  3. 现在脚本需要检查是否有任何东西发现,如果有,运行脚验证码。 要做到这一点,请创建一个 if 声明,其中条件是 canHarvest。 如果在 canHarvest 中存在任何东西,这个声明将评论为真。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    end
    end
  4. 在 if 声明中,添加一个打印声明来确定脚本是否正常运行。你可以在确定它工作后编写逻辑来采集物品。


    if canHarvest then
    -- 用于测试代码是否工作
    print("Found an item")
    end
  5. 在函数的 end 声明下,添加 toolPart.Touched:Connect(onTouch)。这允许脚本检查是否有任何东西触摸工具(或在此情况下,其手柄),如果是这样,调用 onTouch()


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. 玩项目,并使用工具在可收获物品上使用(左击以挥舞)。请确保您在输出窗口中看到“找到一个物品”。

排查提示

如果您不能看到此信息,请尝试以下几个提示。

  • 如果您使用自定义零件和网格,可能会出错。脚本只会工作,如果 CanHarvest 对象是零件工具触摸的子对象。
  • 请确保工具在 StarterPack 中,而不在 工作间orkspace 中。
  • 检查零件是否固定。

获取玩家统计

在增加玩家物品之前,工具必须找到玩家在该玩家的排行榜上拥有的物品数量。 一旦工具有 access to 排行榜,它就可以改变玩家的物品数量。

  1. 首先,使用工具获取玩家。在工具脚本中,在 local item = toolitem 下,并在自定义函数上,输入:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. 在下一行中,使用 FindFirstChild() 函数找到玩家的排行榜。


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. local playerStats 下,创建变量来存储物品和空间统计。


    local playerStats = player:FindFirstChild("leaderstats")
    local playerItems = playerStats:FindFirstChild("Items")
    local playerSpaces = playerStats:FindFirstChild("Spaces")

检查可收集对象

现在该工具脚本已创建 playerItems 和 playerSpaces 变量,您可以开始向玩家提供物品。 使用创建的函数检查工具触摸到的对象是否可以收获,并且玩家有足够的空间在他们的背包中以增加在排行榜上显示的物品。

  1. 脚本需要一个 if 声明,其中满足两个条件。首先,创建一个 if 声明,然后添加以下条件,连接到 and 关键字。。

    • canHarvest.Value == true
    • playerItems.Value < playerSpaces.Value

    local function onTouch(partTouched)
    local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")
    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    end
    end
    end
  2. 在 if 语句中,通过输入 playerItems.Value += 1 来玩家的物品。


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. 播放您的项目;使用您的工具收获一件物品并检查物品数量是否增加。

重置项目

当物品收获时,它将以两种方式重置:

  • 物品将消失,不能交互
  • 可以设置为 false

该物品将在短时间后恢复正常。这样一来,玩家只需要为每个采集季购买一件物品,而且需要在原始重置之后才能看到更多。

  1. 在哪里添加物品时,将canHarvest设置为canHarvest。通过让玩家在收集该物品时使用canHarvest的值为2>工具每次命中一次2>,脚本将不会给出任何一个物品。


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. 将值设置为“关闭”后,将零件的透明度设置为1(隐藏),并将“碰撞”设置为“关闭”,意味着玩家无法触摸它。


    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    end
  3. 键入 task.wait(5) 以为项目重置提供时间。 5 是一个建议的数字,也许会根据您的体验时间而有所不同。


    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    task.wait(5)
    end
  4. 在等待后,做相反的,通过将 CanHarvest 设置为 true 并将 Transparency 和 CanCollide 设置为原始值重置。


    task.wait(5)
    canHarvest.Value = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. 播放项目并检查:

    • 玩家只能获得 1 个物品来收获物品。
    • 该物品会消失,然后在 5 秒后重新出现。

排查提示

在此时,如果一个检查没有通过,请尝试以下其中一个。

  • 检查Transparency和CanCollide是否拼写和大写正确。
  • 请确保使用 canHarvest.Value 而不是 canHarvest = true。

完成工具脚本

脚本的完整版本可以在下面引用。


local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- 重置部分已触摸,收获的物品
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- 使收集到的物品重新出现并可以用户再次使用
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)