创建了排行榜后,玩家需要收集的东西。为此,您需要为玩家在世界中找到的 3D 物品创建一个。以下是玩家收集物品的过程视频。
建立一个物品
体验中的物品是玩家使用工具采集的 3D 模型。每个物品,一旦收集后,会消失然后在有限时间后重新出现。
对于物品,请回到你的游戏设计文档。这系列使用水晶作为例子。
如果使用自己的零件,将所有零件组合成一个 模型 。一个方法是选择所有项目,右击零件,然后选择 组 。这会创建一个模型来组织您的零件。
确保零件全部 锚定 。
因此,物品在消失时无法收集,创建一个名为 BoolValue 的物品来跟踪其状态。
在“可采集”属性中,检查 值 方块。检查值框使 boolean 变为 true,意味着玩家可以采集物品。
创建工具
玩家需要像斧头或铲子一样的东西来收集物品。在 Roblox 中,玩家可以装备和使用的物品被称为 工具 。本节使用了一个新手工具,包括所有零件和已制作的动画,您可以稍后自定义。

添加工具
为玩家使用启动工具下载并放置它在起动包中。
在 Explorer 中,在工作区下,右击 StarterPack。然后,选择 从文件中插入 。
选择下载的文件,starterTool.rbxm。
测试你的项目。玩家应该在开始时就装备好工具。在游戏中,按 1 装备或放下工具。单击左键以摆动它。
编写工具
如果工具击中可收集对象,玩家的背包中有足够的空间,玩家的物品数量在排行榜上增加 1 个。收集一个物品会使其消失几秒钟,然后在重新出现前几秒钟内变得不可收集。这鼓励玩家探索以找到更多物品,而不是只单击同一物品。
设置脚本
在这一点上,将脚本添加到工具。这个脚本处理工具触摸可收集对象时发生的事情。
在启动包中,在启动工具下,添加一个名为 ToolScript 的新脚本。
在脚本中,在顶部写一条描述性评论,然后创建变量来存储工具部分和工具本身。
-- 当玩家触摸可收集部件时,给予玩家物品local tool = script.Parentlocal toolPart = tool.Handle
检查物品
每当工具触碰对象时,它都会检查该对象是否有内部的 CanHarvest 以及 boolean 是否设置为 True。
创建一个名为 onTouch() 的新函数,其参数名为 partTouched 。
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)end在那个函数中,创建一个名为 canHarvest 的本地变量。然后,使用 FindFirstChild() 函数查看父部件中是否存在 CanHarvest boolean。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")end现在,脚本需要检查是否实际上发现了任何东西,如果是的话,运行代验证码。要做到这一点,创建一个条件为 canHarvest 的 if 声明。如果在 canHarvest 中存在任何东西,这句话将被评为真实。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendend在 if 声明中,添加打印声明以查看脚本是否运行。在确保它正常运行后,您可以编写收集物品的逻辑。
if canHarvest then-- 用于测试代码是否工作print("Found an item")end在函数的 end 声明下,添加 toolPart.Touched:Connect(onTouch) .这允许脚本检查是否有任何东西触碰工具(或在这种情况下,其手柄),如果是这样,将调用 onTouch()。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)播放项目并在可收集物品上使用工具(单击左键摆动)。请确保在输出窗口中看到消息“找到一个物品”。
排除问题的提示
如果您未收到消信息,请尝试以下提示。
- 如果你使用了自定义零件和网格,可能会出现错误。该脚本只能在 CanHarvest 对象是工具触摸的零件的子对象时运行。
- 确保工具位于启动包中,而不是工作区中。
- 检查零件是否已锚定。
获取玩家数据
在提高玩家物品之前,工具必须找到玩家在该玩家的排行榜中拥有多少物品的位置。一旦工具获得排行榜访问权限,它就可以改变那个玩家的物品数量。
首先,获取使用工具的玩家。在工具脚本下,local item = toolitem 下,并在自定义函数上,输入:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)在下一行中,使用 FindFirstChild() 函数找到玩家的领导数据。
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)在 local playerStats 下,创建变量来存储物品和空间统计数据
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
检查可收集的对象
现在工具脚本拥有了玩家物品和玩家空间变量,你可以开始给玩家提供物品。使用创建的函数检查是否可以收集工具触摸的对象,如果玩家的背包有足够的空间,可以将排行榜上显示的物品增加一倍。
脚本需要满足两个条件的 if 语句。首先创建一个 if 声明,然后添加以下条件,连接到 and 关键字。
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendend在 if 声明本身中,通过输入 playerItems.Value += 1 将玩家的物品添加到物品中。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endend播放你的项目;使用你的工具来收集一个项目并检查项目数量增加。
重置项物品
当物品被收集时,它将以两种方式重置:
- 物品将消失且无法互动
- CanHarvest 设置为 false
该项目将在短时间后恢复正常。这样,玩家只能每次收获一件物品,而且在原始重置时需要寻找更多。
在项目添加的位置设置 canHarvest 为 false。通过使 canHarvest 值为 false 尽快让玩家收集物品,脚本将不会在每次击中工具的时候提供超过一个物品。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend设置值为 false 后,将零件的透明度设置为 1(隐形),并将 CanCollide 设置为 false,即玩家无法触碰它。
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseend键入 task.wait(5) 以给物品重置时间。5 是建议的数字,也许与你希望的体验时长不同。
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)end等待之后,做出与之前的验证码相反的操作,即将 CanHarvest 设置为真,并将透明度和可碰撞重置为原始值。
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueend播放项目并检查:
- 玩家只能获得一个物品来收集一个物品。
- 物品消失后,五秒后重新出现。
排除问题的提示
在这一点上,如果一个检查没有通过,请尝试以下任一项。
- 检查透明度和可碰撞是否正确地拼写并大写。
- 请确保使用 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)