建立排行榜之後,玩家需要收集的東西。為此,您需要為玩家在世界中尋找的 3D 項目創建一個。以下是玩家收集物品的過程視頻。
建立一件物道具
體驗中的項目是玩家使用工具收集的 3D 模型。每個道具,一旦收集後,會消失,然後在有限的時間後重新出現。
對於道具,請回到你的遊戲設計文件。這系列使用水晶作為例子。
如果使用自己的零件,將所有零件組合成 模型 。一種方法是選擇所有項目,右鍵單擊零件,然後選擇 群組 。這會創建一個模型來組織您的零件。
確保零件全部 錨定 。
因此,項目不能在消失時被收集,創建一個名為 BoolValue 的項目來跟蹤其狀態。
在「CanHarvest」屬性中,檢查 價值 方塊。檢查價值欄使 boolean 變成真,即玩家可以收集物道具。
創建工具
玩家需要像斧頭或鏟子一樣的東西來收集物品。在 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現在,腳本需要檢查是否實際發現了任何東西,如果是的話,執行代碼。要執行此操作,創建一個 if 聲明,其條件為 canHarvest 。如果在 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")
檢查可收集的對物件
現在工具腳本擁有創建的 playerItems 和 playerSpaces 變量,您可以開始給玩家提供物道具。使用創建的函數檢查是否可以將工具接觸的對象收集,如果玩家的背包有足夠的空間,可以將排行榜上顯示的項目增加一個。
腳本需要滿足兩個條件的 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播放您的項目;使用您的工具來收集一個項目並檢查項目數量是否增加。
重設項道具
當物品被收集時,它會以兩種方式重置:
- 項目將消失且無法互動
- 可收集設為 false
項目將在短時間後恢復正常。這樣,玩家只能每次收割獲得一件物品,並且在原本重置時需要尋找更多。
在項目添加的位置設置 canHarvest 為 false。當玩家收集物道具時,將 canHarvest 值設為假值,腳本將不會在每次擊中工具時提供超過一個物品。
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)