Thu thập vật phẩm

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Với bảng xếp hạng được tạo, người chơi cần có thứ gì đó để thu thập.Để làm điều đó, bạn cần tạo một vật phẩm 3D cho người chơi tìm thấy trong thế giới.Dưới đây là video về quá trình thu hoạch vật phẩm của người chơi.

Xây dựng một vật phẩm

Các mục trong trải nghiệm là mô hình 3D mà người chơi sử dụng công cụ để thu hoạch.Mỗi mặt vật phẩm, một khi thu hoạch, biến mất và sau đó xuất hiện trở lại sau một thời gian giới hạn.

Đối với vật phẩm, tham khảo lại tài liệu thiết kế trò chơi của bạn. Chủ đề này sử dụng pha lê làm ví dụ.

  1. Tạo một đối tượng, bằng cách sử dụng các bộ phận hoặc đối tượng được tìm thấy bởi người dùng tin cậy trên Marketplace.

    Nếu cần, hãy tải xuống phần tinh thể với liên kết này link. Để thêm nó, hãy nhấp chuột phải vào Khu vực làm việc và chọn Nhập từ tệp .

  2. Nếu sử dụng phần của riêng bạn, hãy nhóm tất cả các phần thành một Mô hình .Một cách để làm điều này là chọn tất cả các mục, nhấp chuột phải vào một phần, và chọn Nhóm .Điều này tạo ra một mô hình tổ chức các bộ phận của bạn.

  3. Hãy chắc chắn rằng các bộ phận đều được neo .

  4. Vì vậy, các mục không thể được thu hoạch trong khi chúng biến mất, tạo một BoolValue có tên CanHarvest để theo dõi trạng tháicủa nó.

  5. Trong Thuộc tính cho CanHarvest, kiểm tra hộp Giá trị . Kiểm tra hộp giá trị làm cho boolean trở thành true, có nghĩa là người chơi có thể thu hoạch vật phẩm.

Tạo một công cụ

Người chơi cần một cái gì đó như một chiếc rìu hoặc một chiếc xẻng để thu thập các vật phẩm.Trong Roblox, các vật phẩm mà người chơi có thể trang bị và sử dụng được gọi là công cụ .Bài học này sử dụng một công cụ khởi động với tất cả các bộ phận và một hoạt hình đã được thực hiện mà bạn có thể tùy chỉnh sau đó.

Thêm công cụ

Đối với người chơi sử dụng công cụ khởi động, tải xuống và đặt nó vào StarterPack.

  1. Tải công cụ khởi động bên dưới.

  2. Trong Explorer, dưới Workspace, nhấp chuột phải vào StarterPack. Sau đó, chọn Nhập từ tập tin .

  3. Chọn tập tin đã tải xuống, starterTool.rbxm .

  4. Kiểm tra dự án của bạn.Người chơi nên được trang bị công cụ ngay khi họ bắt đầu.Trong trò chơi, nhấn 1 để trang bị hoặc cất công cụ.Nhấp chuột trái để xoay nó.

Mã hóa công cụ

Nếu công cụ đánh vào một đối tượng có thể thu hoạch và người chơi có đủ không gian trong túi của họ, số lượng vật phẩm của người chơi tăng lên 1 trên bảng xếp hạng.Thu hoạch một vật phẩm làm nó biến mất trong vài giây và trở nên không thể thu hoạch trong vài giây trước khi xuất hiện lại.Điều này khuyến khích người chơi khám phá để tìm thêm nhiều mặt hàng, thay vì chỉ nhấp vào cùng một mặt hàng.

Thiết lập kịch bản

Tại thời điểm này, thêm một kịch bản vào công cụ. Kịch bản này xử lý những gì xảy ra khi công cụ chạm vào một vật thu hoạch.

  1. Trong StarterPack, dưới StarterTool, thêm một kịch bản mới có tên ToolScript.

  2. Trong kịch bản, viết một bình luận mô tả ở trên cùng, sau đó tạo các biến để lưu phần công cụ và công cụ chính.


    -- Tặng người chơi vật phẩm khi họ chạm vào một phần có thể thu hoạch
    local tool = script.Parent
    local toolPart = tool.Handle

Kiểm tra các mục

Mỗi khi công cụ chạm vào một đối tượng, nó kiểm tra xem đối tượng đó có CanHarvest bên trong hay không và nếu boolean được đặt thành True.

  1. Tạo một chức năng mới có tên là onTouch() với một tham số có tên là partTouched .


    local tool = script.Parent
    local toolPart = tool.Handle
    local function onTouch(partTouched)
    end
  2. Trong chức năng đó, tạo một biến địa phương có tên là canHarvest.Sau đó, sử dụng chức năng FindFirstChild() để xem có CanHarvest boolean trong cha của phần đó không.


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    end
  3. Bây giờ, kịch bản cần kiểm tra xem có thực sự có bất cứ thứ gì được tìm thấy và nếu có, chạy mã.Để làm điều này, tạo một tuyên bố if nơi điều kiện là canHarvest .Nếu có bất cứ thứ gì tồn tại trong canHarvest , tuyên bố này được đánh giá là đúng.


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    end
    end
  4. Trong phát biểu if, thêm một phát biểu in để xem liệu kịch bản có hoạt động hay không. Bạn có thể mã hóa logic để thu thập vật phẩm sau khi bạn chắc chắn nó hoạt động.


    if canHarvest then
    -- Dùng để kiểm tra xem mã có hoạt động không
    print("Found an item")
    end
  5. Dưới tuyên bố của chức năng end, thêm toolPart.Touched:Connect(onTouch).Điều này cho phép kịch bản kiểm tra xem có bất cứ thứ gì chạm vào công cụ (hoặc trong trường hợp này, tay cầm của nó) và nếu có, gọi onTouch() .


    local function onTouch(partTouched)
    local canHarvest = partTouched:FindFirstChild("CanHarvest")
    if canHarvest then
    print("Found an item")
    end
    end
    toolPart.Touched:Connect(onTouch)
  6. Chơi dự án và sử dụng công cụ trên một vật phẩm có thể thu hoạch (nhấp chuột trái để xoay). Hãy chắc chắn rằng bạn thấy thông điệp "Tìm thấy một vật phẩm" trong cửa sổ Thành phẩm.

Mẹo khắc phục sự cố

Nếu bạn không thấy tin nhắn, hãy thử các mẹo sau.

  • Nếu bạn đang sử dụng các phần và khối mô hình tùy chỉnh, có thể xảy ra lỗi.Tập lệnh chỉ hoạt động nếu đối tượng CanHarvest là con của phần công cụ đang chạm vào.
  • Hãy chắc chắn rằng công cụ ở trong StarterPack, không ở trong Workspace.
  • Kiểm tra xem phần có neo hay không.

Nhận chỉ số người chơi

Trước khi tăng các vật phẩm của người chơi, công cụ phải tìm địa điểm của bao nhiêu vật phẩm mà một người chơi có trong bảng xếp hạng của người chơi đó.Khi công cụ có quyền truy cập vào bảng xếp hạng, nó có thể thay đổi số lượng vật phẩm của người chơi đó.

  1. Trước tiên, lấy người chơi bằng công cụ. Trong ToolScript, dưới local item = toolitem và trên chức năng tùy chỉnh, hãy đánh máy:


    local item = toolitem
    local backpack = tool.Parent
    local player = backpack.Parent
    local function onTouch(partTouched)
  2. Trên dòng tiếp theo, tìm chỉ số của người chơi bằng cách sử dụng chức năng FindFirstChild().


    local backpack = tool.Parent
    local player = backpack.Parent
    local playerStats = player:FindFirstChild("leaderstats")
    local function onTouch(partTouched)
  3. Dưới local playerStats, tạo các biến để lưu trữ chỉ số vật phẩm và không gian.


    local playerStats = player:FindFirstChild("leaderstats")
    local playerItems = playerStats:FindFirstChild("Items")
    local playerSpaces = playerStats:FindFirstChild("Spaces")

Kiểm tra một đối tượng có thể thu hoạch

Bây giờ khi kịch bản công cụ có các biến playerItems và playerSpaces được tạo, bạn có thể bắt đầu cho người chơi một vật phẩm.Sử dụng chức năng được tạo ra để kiểm tra xem đối tượng tiếp xúc với công cụ có thể được thu hoạch hay không, và nếu người chơi có đủ không gian trong túi của họ để tăng các mục được hiển thị trên bảng xếp hạng lên một.

  1. Tập lệnh sẽ cần một tuyên bố if với hai điều kiện phải được đáp ứng.Bắt đầu bằng cách tạo một câu lệnh if, sau đó thêm các điều kiện sau, kết nối với từ khóa 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. Trong tuyên bố if chính, thêm vào các mục của người chơi bằng cách gõ playerItems.Value += 1 .


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    end
    end
  3. Chơi dự án của bạn; sử dụng công cụ của bạn để thu hoạch một mục và kiểm tra xem số mục đã tăng lên.

Đặt lại vật phẩm

Khi mục được thu hoạch, nó sẽ được đặt lại theo hai cách:

  • Vật phẩm sẽ biến mất và không thể tương tác
  • CanHarvest được đặt thành false

Vật phẩm sẽ trở lại bình thường sau một thời gian ngắn.Theo cách này, người chơi chỉ nhận được một vật phẩm cho mỗi lần thu hoạch, và cần phải xem xung quanh để tìm thêm trong khi vẫn giữ nguyên.

  1. Dưới nơi các mục được thêm vào, hãy đặt canHarvest thành false.Bằng cách làm cho giá trị của canHarvest giả mạo ngay khi người chơi thu hoạch món vật phẩm, kịch bản sẽ không cho nhiều hơn một món đồ mỗi lần đánh công cụ.


    if canHarvest then
    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    end
    end
  2. Sau khi đặt giá trị thành false, đặt độ trong suốt của phần thành 1 (không nhìn thấy) và CanCollide thành false, có nghĩa là người chơi không thể chạm vào nó.


    if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
    playerItems.Value += 1
    canHarvest.Value = false
    partTouched.Transparency = 1
    partTouched.CanCollide = false
    end
  3. Loại task.wait(5) để cho thời gian để vật phẩm được trả về mặc định. 5 là một số được đề xuất, và có thể khác nhau về thời gian bạn muốn cho trải nghiệm của mình.


    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. Sau khi chờ đợi, làm ngược lại với mã trước, bằng cách thiết lập CanHarvest thành true và reset lại Transparency và CanCollide về các giá trị ban đầu.


    task.wait(5)
    canHarvest.Value = true
    partTouched.Transparency = 0
    partTouched.CanCollide = true
    end
  5. Chơi dự án và kiểm tra:

    • Người chơi chỉ nhận được 1 vật phẩm để thu hoạch một vật phẩm.
    • Vật phẩm biến mất và sau đó xuất hiện lại sau năm giây.

Mẹo khắc phục sự cố

Tại thời điểm này, nếu một trong những kiểm tra không thông qua thử một trong những điều sau.

  • Kiểm tra xem Transparency và CanCollide được viết và in đậm chính xác.
  • Hãy chắc chắn sử dụng canHarvest.Value và không phải canHarvest = true.

Hoàn thành ToolScript

Một phiên bản hoàn thành của kịch bản có thể tham chiếu dưới đây.


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
-- Đặt lại phần đã chạm, vật phẩmđược thu thập
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Làm cho vật phẩm được thu thập xuất hiện lại và có thể sử dụng lại
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)