隨著創建排行榜,玩家需要有什麼收集。為此,您需要創建玩家在世界中找到的 3D 項目。以下是玩家收集物品的過程。
建造物品
體驗中的項目是玩家使用工具來收集的 3D 模型。每個道具一旦收集完成後,就會消失,然後在有限的時間後重新出現。
對於項道具,請參閱遊戲設計文件。這個系列使用水晶作為範例。
使用零件或對話框找到的對象來創建對物件。
如果需要,請使用此 連結 下載水晶零件。若要添加零件,請右鍵按一下工作區並選擇 從檔案中插入 。
如果您使用自己的零件,將所有零件組成 模型 。其中一個方法是將所有項目選擇為 零件群組 。這會創建一個組織您零件的模型。
務必讓零件都 錨定 。
因此,當項目不再存在時,它們不能被收穫,而且創建名為 CanHarvest 的 資料值 來跟蹤其狀態。
在 CanHarvest 屬性中,檢查 價值 欄方塊。檢查值欄位會使Boolean變成真,這表示玩家可以採集道具目。
創建工具
玩家需要有像斧頭或鏟子等來收集物品。在 Roblox 中,玩家可以裝備並使用的物品稱為「工具」。這個課程使用一個初始工具,包含所有零件和動畫,以便您可以稍後自訂。
添加工具
玩家使用新手工具時,請從 StarterPack 下載並放置在其中。
在 Explorer 中,在 Workspace 下,右鍵單擊 StarterPack。然後,選擇 從檔案中插入 。
選擇下載的檔案,starterTool.rbxm。
測試您的項目。玩家應該裝備工具,一旦他們啟動。在遊戲中,按下 1 以裝備或放下工具。按一下滑鼠左鍵來揮動它。
編寫工具
如果工具擊中可以收集的對象,玩家的背包有足夠的空間,玩家的物品計數器會在排行榜上升級 1 。收集一個物品會讓它在幾秒鐘內消失,然後在幾秒鐘內變成無法收集的狀態,再重新出現。這鼓勵玩家探索,而不是只是點擊相同的道具目。
設置指令碼
在此時,將一個指令碼添加到工具。這個指令碼處理工具對可以收集的對象時發生的物件件。
在 StarterPack 中,在 StarterTool 下,添加名為 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 是否為可用。
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")end現在,需要檢查是否有任何東西被找到,如果是,請執行此代碼。若要這麼做,請在 canHarvest 中建立一個 if 句,其中條件是 canHarvest 。如果在 canHarvest 中存在任何東西,此 if 句將評估為 true。
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 對象是零件工具正在觸摸的子孫。
- 請確保工具在 StarterPack 中,不是在 Workspace 中。
- 檢查零件是否錨定。
獲取玩家統計資料
在增加玩家物品之前,工具必須找到玩家在該玩家的排行榜上擁有的物品數量。 一旦工具有 access 到排行榜,就可以變更玩家的物品數量。
首先,使用工具。在 ToolScript 中,在 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")
檢查可收集的對象
現在工具腳本擁有玩家Items 和玩家Spaces 變量,您可以開始給玩家一個道具。 使用創建的函數檢查工具腳本觸擊到的對象是否可以收集,並且玩家有足夠的空間在他們的背包中,以增加在排行榜上顯示的項目。
指令碼將需要兩個必須滿足的條件才能執行。首先,創建一個必須滿足的條件,然後添加以下條件,與 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。 作為玩家收集項道具時,腳本將不會提供超過一個項目每個工具擊中。
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendend設定值為"關閉"後,將零件的透明度設為1(隱形),並將"碰撞"設為"關閉",這表示玩家無法碰它。
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 設定為 true,並將 Transparency 和 CanCollide 設置為原始值。
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueend播放項目並檢查:
- 玩家只能獲得 1 個物品來收穫一個道具。
- 項目會消失,然後在五秒後重新出現。
排障提示
如果其中的任何一個檢查沒有通過,請從以下列中試一試。
- 確認Transparency和CanCollide是否正確拼寫。
- 請務必使用 canHarvest.Value 而不是 canHarvest = 真。
完成工具脚本
指定的指令碼版本可以在下方參考。
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)