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ụ.
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 .
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.
Hãy chắc chắn rằng các bộ phận đều được neo .
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ó.
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.
Trong Explorer, dưới Workspace, nhấp chuột phải vào StarterPack. Sau đó, chọn Nhập từ tập tin .
Chọn tập tin đã tải xuống, starterTool.rbxm .
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.
Trong StarterPack, dưới StarterTool, thêm một kịch bản mới có tên ToolScript.
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ạchlocal tool = script.Parentlocal 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.
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.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endTrong 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")endBâ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 thenendendTrong 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ôngprint("Found an item")endDướ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 thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)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 đó.
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 = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)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.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)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.
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 thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendTrong 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 thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendChơ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.
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 thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendSau 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 thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendLoạ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 thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endSau 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 = truepartTouched.Transparency = 0partTouched.CanCollide = trueendChơ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)