收集物品

*此內容是使用 AI(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 是否為可用。


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    end
  3. 現在,需要檢查是否有任何東西被找到,如果是,請執行此代碼。若要這麼做,請在 canHarvest 中建立一個 if 句,其中條件是 canHarvest 。如果在 canHarvest 中存在任何東西,此 if 句將評估為 true。


    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 中,不是在 Workspace 中。
  • 檢查零件是否錨定。

獲取玩家統計資料

在增加玩家物品之前,工具必須找到玩家在該玩家的排行榜上擁有的物品數量。 一旦工具有 access 到排行榜,就可以變更玩家的物品數量。

  1. 首先,使用工具。在 ToolScript 中,在 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")

檢查可收集的對象

現在工具腳本擁有玩家Items 和玩家Spaces 變量,您可以開始給玩家一個道具。 使用創建的函數檢查工具腳本觸擊到的對象是否可以收集,並且玩家有足夠的空間在他們的背包中,以增加在排行榜上顯示的項目。

  1. 指令碼將需要兩個必須滿足的條件才能執行。首先,創建一個必須滿足的條件,然後添加以下條件,與 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。 作為玩家收集項道具時,腳本將不會提供超過一個項目每個工具擊中。


    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 個物品來收穫一個道具。
    • 項目會消失,然後在五秒後重新出現。

排障提示

如果其中的任何一個檢查沒有通過,請從以下列中試一試。

  • 確認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)