收集項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

建立排行榜之後,玩家需要收集的東西。為此,您需要為玩家在世界中尋找的 3D 項目創建一個。以下是玩家收集物品的過程視頻。

建立一件物道具

體驗中的項目是玩家使用工具收集的 3D 模型。每個道具,一旦收集後,會消失,然後在有限的時間後重新出現。

對於道具,請回到你的遊戲設計文件。這系列使用水晶作為例子。

  1. 使用零件或市場中由信任使用者找到的物件來創建對象。

    如果需要,請使用此 鏈接 下載水晶部分。要添加它,請右鍵單擊工作區並選擇 從文件中插入

  2. 如果使用自己的零件,將所有零件組合成 模型 。一種方法是選擇所有項目,右鍵單擊零件,然後選擇 群組 。這會創建一個模型來組織您的零件。

  3. 確保零件全部 錨定

  4. 因此,項目不能在消失時被收集,創建一個名為 BoolValue 的項目來跟蹤其狀態。

  5. 在「CanHarvest」屬性中,檢查 價值 方塊。檢查價值欄使 boolean 變成真,即玩家可以收集物道具。

創建工具

玩家需要像斧頭或鏟子一樣的東西來收集物品。在 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. 現在,腳本需要檢查是否實際發現了任何東西,如果是的話,執行代碼。要執行此操作,創建一個 if 聲明,其條件為 canHarvest 。如果在 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")

檢查可收集的對物件

現在工具腳本擁有創建的 playerItems 和 playerSpaces 變量,您可以開始給玩家提供物道具。使用創建的函數檢查是否可以將工具接觸的對象收集,如果玩家的背包有足夠的空間,可以將排行榜上顯示的項目增加一個。

  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. 播放您的項目;使用您的工具來收集一個項目並檢查項目數量是否增加。

重設項道具

當物品被收集時,它會以兩種方式重置:

  • 項目將消失且無法互動
  • 可收集設為 false

項目將在短時間後恢復正常。這樣,玩家只能每次收割獲得一件物品,並且在原本重置時需要尋找更多。

  1. 在項目添加的位置設置 canHarvest 為 false。當玩家收集物道具時,將 canHarvest 值設為假值,腳本將不會在每次擊中工具時提供超過一個物品。


    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)