เมื่อสร้างลีดเดอร์บอร์ดแล้ว ผู้เล่นต้องการบางอย่างที่จะรวบรวมสำหรับเรื่องนั้น คุณต้องสร้างไอเทม 3D สำหรับผู้เล่นที่จะค้นหาในโลกด้านล่างนี้เป็นวิดีโอของกระบวนการที่ผู้เล่นเก็บรวบรวมไอเทม
ไอเท็ม
สิ่งของในประสบการณ์เป็นโมเดล 3D ที่ผู้เล่นใช้เครื่องมือเพื่อเก็บเกี่ยวแต่ละรายการหายไปและปรากฏขึ้นอีกครั้งหลังจากระยะเวลาจํากัด
สำหรับรายการ โปรดกลับไปที่เอกสารออกแบบเกมของคุณ ซีรีส์นี้ใช้คริสตัลเป็นตัวอย่าง
หากใช้ส่วนของคุณเอง รวบรวมชิ้นส่วนทั้งหมดเป็น โมเดล วิธีหนึ่งในการทำเช่นนี้คือเลือกรายการทั้งหมด, คลิกขวาที่ส่วน, และเลือก กลุ่ม สิ่งนี้สร้างโมเดลที่จัดระเบียบชิ้นส่วนของคุณ
ตรวจสอบให้แน่ใจว่าชิ้นส่วนทั้งหมด ถูกยึด
ดังนั้นไอเทมจะไม่สามารถเก็บได้ในขณะที่พวกเขาหายไปโดยสร้าง BoolValue ชื่อว่า CanHarvest เพื่อติดตามสถานะของมัน
ในคุณสมบัติสำหรับ CanHarvest ตรวจสอบกล่อง ค่า ไอเท็ม
สร้างเครื่องมือ
ผู้เล่นต้องการบางอย่างเช่นขวานหรือพลั่วเพื่อรวบรวมไอเทมใน Roblox รายการที่ผู้เล่นสามารถติดตั้งและใช้งานได้เรียกว่าเครื่องมือ **** บทเรียนนี้ใช้เครื่องมือเริ่มต้นพร้อมกับทุกส่วนและแอนิเมชันที่สร้างไว้แล้วที่คุณสามารถปรับแต่งได้ในภายหลัง

เพิ่มเครื่องมือ
สำหรับผู้เล่นที่จะใช้เครื่องมือเริ่มต้นดาวน์โหลดและวางไว้ใน StarterPack
ใน Explorer ใต้ Workspace คลิกขวาที่ StarterPack จากนั้นเลือก ใส่จากไฟล์
เลือกไฟล์ที่ดาวน์โหลดแล้ว starterTool.rbxm
ทดสอบโครงการของคุณผู้เล่นควรได้รับอุปกรณ์ด้วยเครื่องมือทันทีที่พวกเขาเริ่มในเกม กด 1 เพื่อติดตั้งหรือเก็บเครื่องมือคลิกซ้ายเพื่อสวิงมัน
เขียนโค้ดเครื่องมือ
ตารางอันดับจำนวนรายการของผู้เล่นจะเพิ่มขึ้น 1 ในลีดเดอร์บอร์ดการเก็บเกี่ยวรายการทำให้มันหายไปเป็นเวลาไม่กี่วินาทีและกลายเป็นไม่สามารถเก็บได้ภายในไม่กี่วินาทีก่อนที่จะปรากฏอีกครั้งสิ่งนี้ส่งเสริมให้ผู้เล่นสำรวจเพื่อค้นหาไอเทมเพิ่มเติมแทนที่จะคลิกไอเทมเดียวเท่านั้น
ตั้งค่าสคริปต์
ในจุดนี้ เพิ่มสคริปต์ให้กับเครื่องมือ สคริปต์นี้จะจัดการสิ่งที่เกิดขึ้นเมื่อเครื่องมือสัมผัสวัตถุที่เก็บเกี่ยวได้
ใน StarterPack ภายใต้ StarterTool เพิ่มสคริปต์ใหม่ชื่อ ToolScript
ในสคริปต์, เขียนความคิดเห็นที่อธิบายที่ด้านบน, จากนั้นสร้างตัวแปรเพื่อเก็บส่วนของเครื่องมือและเครื่องมือเอง
-- ให้ไอเทมแก่ผู้เล่นเมื่อพวกเขาสัมผัสชิ้นส่วนที่เก็บเกี่ยวได้local tool = script.Parentlocal toolPart = tool.Handle
ตรวจสอบรายการ
เมื่อเครื่องมือสัมผัสวัตถุ มันจะตรวจสอบว่าวัตถุนั้นมี CanHarvest อยู่ภายในหรือไม่ และถ้าตัวเลขเป็นจริง
สร้างฟังก์ชันใหม่ชื่อ onTouch() ด้วยพารามิเตอร์ชื่อ partTouched
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endในฟังก์ชันนั้น สร้างตัวแปรท้องถิ่นชื่อ canHarvestจากนั้นใช้ฟังก์ชัน FindFirstChild() เพื่อดูว่ามี CanHarvest boolean ในพ่อของส่วนนั้นหรือไม่
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endตอนนี้สคริปต์จะต้องตรวจสอบว่ามีอะไรที่พบจริงๆ และหากมี รหัสสร้างข้อแม้ถ้าเงื่อนไขคือ canHarvestหากมีอะไรอยู่ใน canHarvest คำสั่งนี้จะประเมินเป็นจริง
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 ไม่ใช่ในพื้นที่ทำงาน
- ตรวจสอบว่าชิ้นส่วนถูกยึดไว้
รับสถิติของผู้เล่น
ก่อนที่จะเพิ่มไอเทมของผู้เล่น เครื่องมือจะต้องค้นหาตำแหน่งจำนวนไอเทมที่ผู้เล่นมีในลีดเดอร์บอร์ดของผู้เล่นนั้นเมื่อเครื่องมือมีการเข้าถึงลีดเดอร์บอร์ดแล้ว มันสามารถเปลี่ยนจํานวนรายการของผู้เล่นคนนั้นได้
แรก, รับผู้เล่นโดยใช้เครื่องมือ ใน 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")
ตรวจสอบวัตถุที่เก็บเกี่ยวได้
ตอนนี้สคริปต์เครื่องมือมีตัวแปร playerItems และ playerSpaces ที่สร้างขึ้นแล้ว คุณสามารถเริ่มให้ผู้เล่นได้รับไอเทมใช้ฟังก์ชันที่สร้างขึ้นเพื่อตรวจสอบว่าวัตถุที่สัมผัสเครื่องมือสามารถเก็บเกี่ยวได้หรือไม่ และหากผู้เล่นมีพื้นที่เพียงพอในกระเป๋าของพวกเขาเพื่อเพิ่มรายการที่แสดงบนลีดเดอร์บอร์ดโดยหนึ่ง
สคริปต์จะต้องใช้คำสั่ง if ที่มีสองเงื่อนไขที่ต้องปฏิบัติตามเริ่มต้นด้วยการสร้างคําสั่ง if จากนั้นเพิ่มเงื่อนไขต่อไปนี้โดยเชื่อมโยงกับคําสั่ง 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โดยการทำให้ค่าของ canHarvest ไอเท็มสคริปต์จะไม่ให้มากกว่าหนึ่งรายการต่อครั้งต่อเครื่องมือ
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendหลังจากตั้งค่ามูลค่าเป็น false ตั้งความโปร่งใสของชิ้นส่วนเป็น 1 (ไม่สามารถมองเห็นได้) และ CanCollide เป็น false ซึ่งหมายความว่าผู้เล่นไม่สามารถแตะต้องได้
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 เป็นจริงและรีเซ็ตความโปร่งใสและ CanCollide เป็นค่าเดิม
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendเล่นโครงการและตรวจสอบ:
- ผู้เล่นจะได้รับไอเทมเพียง 1 รายการสําหรับการเก็บเกี่ยวไอเทม
- รายการจะหายไปแล้วปรากฏขึ้นอีกครั้งหลังจากห้าวินาที
เคล็ดลับการแก้ปัญหา
ในจุดนี้หากหนึ่งในการตรวจสอบไม่ผ่านให้ลองหนึ่งในต่อไปนี้
- ตรวจสอบว่าความโปร่งใสและ CanCollide สะกดและเขียนเป็นตัวหนาอย่างถูกต้อง
- ตรวจสอบให้ใช้ 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)