收集物品

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

创建了排行榜后,玩家需要收集的东西。为此,您需要为玩家在世界中找到的 3D 物品创建一个。以下是玩家收集物品的过程视频。

建立一个物品

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

对于物品,请回到你的游戏设计文档。这系列使用水晶作为例子。

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

    如果需要,请下载此 链接 下的水晶部分。要添加它,请右击工作区并选择 从文件中插入

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

  3. 确保零件全部 锚定

  4. 因此,物品在消失时无法收集,创建一个名为 BoolValue 的物品来跟踪其状态。

  5. 在“可采集”属性中,检查 方块。检查值框使 boolean 变为 true,意味着玩家可以采集物品。

创建工具

玩家需要像斧头或铲子一样的东西来收集物品。在 Roblox 中,玩家可以装备和使用的物品被称为 工具 。本节使用了一个新手工具,包括所有零件和已制作的动画,您可以稍后自定义。

添加工具

为玩家使用启动工具下载并放置它在起动包中。

  1. 下载以下启动工具。

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

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

  4. 测试你的项目。玩家应该在开始时就装备好工具。在游戏中,按 1 装备或放下工具。单击左键以摆动它。

编写工具

如果工具击中可收集对象,玩家的背包中有足够的空间,玩家的物品数量在排行榜上增加 1 个。收集一个物品会使其消失几秒钟,然后在重新出现前几秒钟内变得不可收集。这鼓励玩家探索以找到更多物品,而不是只单击同一物品。

设置脚本

在这一点上,将脚本添加到工具。这个脚本处理工具触摸可收集对象时发生的事情。

  1. 在启动包中,在启动工具下,添加一个名为 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. 现在,脚本需要检查是否实际上发现了任何东西,如果是的话,运行代验证码。要做到这一点,创建一个条件为 canHarvest 的 if 声明。如果在 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 对象是工具触摸的零件的子对象时运行。
  • 确保工具位于启动包中,而不是工作区中。
  • 检查零件是否已锚定。

获取玩家数据

在提高玩家物品之前,工具必须找到玩家在该玩家的排行榜中拥有多少物品的位置。一旦工具获得排行榜访问权限,它就可以改变那个玩家的物品数量。

  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")

检查可收集的对象

现在工具脚本拥有了玩家物品和玩家空间变量,你可以开始给玩家提供物品。使用创建的函数检查是否可以收集工具触摸的对象,如果玩家的背包有足够的空间,可以将排行榜上显示的物品增加一倍。

  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. 播放你的项目;使用你的工具来收集一个项目并检查项目数量增加。

重置项物品

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

  • 物品将消失且无法互动
  • CanHarvest 设置为 false

该项目将在短时间后恢复正常。这样,玩家只能每次收获一件物品,而且在原始重置时需要寻找更多。

  1. 在项目添加的位置设置 canHarvest 为 false。通过使 canHarvest 值为 false 尽快让玩家收集物品,脚本将不会在每次击中工具的时候提供超过一个物品。


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. 设置值为 false 后,将零件的透明度设置为 1(隐形),并将 CanCollide 设置为 false,即玩家无法触碰它。


    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 设置为真,并将透明度和可碰撞重置为原始值。


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

    • 玩家只能获得一个物品来收集一个物品。
    • 物品消失后,五秒后重新出现。

排除问题的提示

在这一点上,如果一个检查没有通过,请尝试以下任一项。

  • 检查透明度和可碰撞是否正确地拼写并大写。
  • 请确保使用 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)