เครื่องมือในเกม Tools เป็นเครื่องมือที่ผู้เล่นสามารถสวมใส่ในเซสชันต่างๆ เช่น อาวุธ, ไม้กายสิทธิ์, ไฟฉาย, กุญแจ และอื่นๆ คุณสามารถออกแบบเครื่องมือและรวมไว้ในคลังของผู้เล่นหรือวางไว้รอบโลกในฐานะที่เป็นของเก็บได้
สร้างเครื่องมือในเกม
วัตถุ Tool เป็นพื้นฐานของเครื่องมือใดๆ ใน Roblox ดังนั้นคุณจะต้องสร้างหนึ่งอัน มันง่ายกว่าที่จะดูตัวอย่างว่าเครื่องมือมีลักษณะอย่างไรโดยการออกแบบใน Workspace และต่อมาคุณสามารถทำให้มันเป็นรายการ คลัง หรือรายการ ที่ได้รับ/ซื้อ
เมื่อเลือก Tool ใหม่แล้ว ให้เข้าถึงหน้าต่าง Properties และปรับแต่งว่าเครื่องมือจะปรากฏในคลังของผู้เล่นอย่างไร:
- TextureId — ระบุ ID ของภาพสินทรัพย์สำหรับเครื่องมือในคลังของผู้เล่น
- ToolTip — ชื่อเครื่องมือที่แสดงเมื่อเลื่อนเมาส์ไปเหนือในคลังของผู้เล่น

ตัดสินใจว่าเครื่องมือจะเป็น เครื่องมือทางกายภาพในสภาพแวดล้อม 3D (ทั่วไปที่สุด) หรือเป็นเครื่องมือ ที่ไม่ใช่ทางกายภาพ ที่เพียงแค่ครอบครองในคลังของผู้เล่นและตอบสนองต่อการป้อนข้อมูลของพวกเขา
เครื่องมือทางกายภาพ
หลังจากสร้างอินสแตนซ์ Tool สำหรับเครื่องมือทางกายภาพแล้ว คุณจะต้อง เพิ่ม ชิ้นส่วน/เมช เพื่อประกอบรูปลักษณ์ในโลก 3D นอกจากนี้คุณยังต้องรวม ด้ามจับ ซึ่งตัวละครของผู้เล่น จับ
เพิ่มชิ้นส่วน/เมช
เครื่องมือในเกมสามารถประกอบด้วย Parts และ/หรือ MeshParts หนึ่งชิ้นหรือมากกว่า หากคุณสร้างเครื่องมือจากหลายชิ้น ให้จำไว้ว่าต้องเชื่อมต่อทั้งหมดเข้าด้วยกันโดยใช้ WeldConstraints หรือ ข้อจำกัดทางกล อื่นๆ เพื่อให้เครื่องมือยังคงอยู่ในรูปแบบขณะผู้เล่นถือมัน

ตั้งค่าด้ามจับ
เพื่อให้ผู้เล่นสามารถถือเครื่องมือได้ ชิ้นส่วนหนึ่งของเครื่องมือจะต้องมีชื่อว่า Handle นี่คือที่ที่เครื่องมือจะเชื่อมต่อกับ RightHand ส่วนของร่างกาย (R15) หรือ Right Arm (R6)
หากเครื่องมือประกอบด้วยเพียง MeshPart ชิ้นเดียว ให้ตั้งชื่อชิ้นส่วนนั้นว่า Handle มิฉะนั้น คุณสามารถรวมชิ้นส่วนแยกต่างหากที่ชื่อว่า Handle เป็น ลูกหลานโดยตรง ของ Tool และจากนั้นเชื่อมต่อกับชิ้นส่วนอื่นด้วย WeldConstraint หรือ ข้อจำกัดทางกล
ตัวอย่างต่อไปนี้แสดงเครื่องมือที่มีสามอินสแตนซ์: เมช Handle, RopeConstraint, และเมชโคมไฟที่แขวนจากเชือก

ปรับตำแหน่ง/ทิศทางการจับ
คุณสมบัติ Grip ของเครื่องมือเป็น CFrame ซึ่งระบุว่าเครื่องมือถูกวางและจัดแนวอย่างไรเมื่อเปรียบเทียบกับตัวละครที่ถือมัน

เนื่องจากตำแหน่ง/ทิศทางการจับที่เหมาะสมจะแตกต่างกันไปสำหรับเครื่องมือแต่ละชิ้น คุณจะต้องทดลองกับค่าเหล่านี้จนกว่าการจับของเครื่องมือของคุณจะดูถูกต้อง ตัวอย่างต่อไปนี้แสดงการตั้งค่า Grip ที่ไม่ถูกต้องและถูกต้องสำหรับโคมไฟที่แขวน:


เครื่องมือที่ไม่ใช่ทางกายภาพ
เครื่องมือที่ไม่ใช่ทางกายภาพ Tool จะครอบครองใน คลัง ของผู้เล่นและตอบสนองต่อการป้อนข้อมูลของพวกเขา ตัวอย่างเช่น เกมแนวบทบาทอาจมีชุดของเวทมนตร์ที่ผู้เล่นสามารถ "ร่าย" ผ่านคลังของพวกเขา

เครื่องมือที่ไม่ใช่ทางกายภาพไม่ต้องการการประกอบ 3D และไม่ใช้ชิ้นส่วน Handle ดังนั้นคุณควร ปิด คุณสมบัติ RequiresHandle ของเครื่องมือ:

เพิ่มเครื่องมือในเกม
เมื่อคุณเสร็จสิ้นการ สร้าง เครื่องมือในเกมของคุณแล้ว คุณจะต้องวางมันในพื้นที่ที่ถูกต้องในลำดับชั้น Explorer การวางเครื่องมือในลำดับชั้นขึ้นอยู่กับการใช้งานที่ตั้งใจไว้
คลังของผู้เล่น
หากคุณต้องการให้ผู้เล่นทุกคนเริ่มต้นด้วยเครื่องมือในคลังของพวกเขา ให้ใส่มันไว้ในคอนเทนเนอร์ StarterPack เมื่อผู้เล่นคนใดคนหนึ่งเกิด ระบบจะทำการคัดลอกเครื่องมือไปยัง Backpack ของพวกเขา จากที่นั่น ผู้เล่นสามารถสวมใส่เครื่องมือได้โดยการคลิกที่ไอคอนในคลังหรือโดยการกดปุ่มลัดที่เกี่ยวข้องเช่น 1 หรือ 2

โปรดทราบว่าเครื่องมือจะถูกคัดลอกไปยังคลังของผู้เล่น (Backpack) ตามลำดับที่เพิ่มไปยัง StarterPack สำหรับการจัดเรียงที่ควบคุมได้มากขึ้น คุณสามารถเพิ่ม LocalScript ไปยัง StarterPack ซึ่งจะย้ายเครื่องมือไปยัง ReplicatedStorage ชั่วคราวแล้วเปลี่ยนพวกมันกลับไปยัง Backpack ตามลำดับที่ระบุในตาราง order
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local order = {"WaterSpell", "FireSpell", "AirSpell", "EarthSpell"}
local backpack = script.Parent
for _, item in backpack:GetChildren() do
if item:IsA("Tool") then
item.Parent = ReplicatedStorage
end
end
-- เปลี่ยนพ่อแม่เครื่องมือไปยังกระเป๋าในลำดับที่ระบุ
for i = 1, #order do
local tool = ReplicatedStorage:FindFirstChild(order[i])
if tool then
tool.Parent = backpack
end
endเครื่องมือที่เก็บได้
หากคุณต้องการอนุญาตให้ผู้เล่นเก็บเครื่องมือทางกายภาพขณะสำรวจโลก 3D ให้วางเครื่องมือใน Workspace เช่นเดียวกับวัตถุ 3D ปกติ เครื่องมือที่เก็บได้จะถูกสวมใส่โดยอัตโนมัติและเพิ่มไปยังคลังของผู้เล่น (คุณไม่จำเป็นต้องเพิ่มการตรวจจับการชนเพิ่มเติมเพื่อให้ตัวละครหยิบเครื่องมือ)
ตามที่กล่าวไว้ในส่วน เพิ่มชิ้นส่วน/เมช ชิ้นส่วนของเครื่องมือไม่ควรเป็น Anchored โดยทั่วไป เนื่องจากตัวละครของผู้เล่นจะติดอยู่กับที่เมื่อพวกเขาหยิบหรือสวมใส่เครื่องมือที่ยึดไว้ อย่างไรก็ตาม หากคุณต้องการยึดเครื่องมือที่เก็บได้ไว้ในสถานที่เฉพาะในโลก 3D เช่น ลอยอยู่เหนือพื้นเล็กน้อย คุณสามารถเพิ่ม Script ต่อไปนี้ไปยังเครื่องมือเพื่อยกเลิกการยึดชิ้นส่วนเมื่อเก็บรวบรวม
local tool = script.Parent
tool.Equipped:Connect(function()
for _, part in tool:GetDescendants() do
if part:IsA("BasePart") and part.Anchored then
part.Anchored = false
end
end
end)เครื่องมือที่ได้รับ/ซื้อ
หากคุณต้องการตั้งค่าเครื่องมือเป็นรางวัลเมื่อผู้เล่นทำภารกิจสำเร็จ หรือเสนอเครื่องมือสำหรับขายในร้านค้าในเกม ให้ใส่เครื่องมือเหล่านั้นไว้ใน ReplicatedStorage จากที่นั่น คุณสามารถ Clone() เครื่องมือไปยัง Backpack ของผู้เล่นในเวลาที่เหมาะสม

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local player = Players.LocalPlayer
local backpack = player:WaitForChild("Backpack")
-- สร้างสำเนาของเครื่องมือ
local tool = ReplicatedStorage:FindFirstChild("WaterSpell")
if tool then
local clone = tool:Clone()
clone.Parent = backpack -- เพิ่มสำเนาไปยังคลังของผู้เล่น
endใช้งานเอฟเฟกต์เครื่องมือ
หลังจาก เพิ่มเครื่องมือในเกมของคุณ คุณสามารถใช้งานสคริปต์เพื่อให้ผู้เล่นใช้เครื่องมือของพวกเขาและทำการกระทำที่ต้องการ เหตุการณ์เฉพาะเครื่องมือดังต่อไปนี้ระบุสถานะของเครื่องมือและการป้อนข้อมูลของผู้เล่นกับมัน
- Equipped() — ถูกเรียกเมื่อผู้เล่นเลือกเครื่องมือจากกระเป๋าของพวกเขา
- Unequipped() — ถูกเรียกเมื่อผู้เล่นเปลี่ยนเครื่องมือหรือปล่อยเครื่องมือ
- Activated() — ถูกเรียกเมื่อผู้เล่นเริ่มเปิดใช้งานเครื่องมือ (คลิก, แตะ, หรือกดปุ่มทริกเกอร์ด้านหลังขวาบนเกมแพด)
- Deactivated() — ถูกเรียกเมื่อผู้เล่นหยุดการป้อนข้อมูลการเปิดใช้งาน (ปล่อยปุ่มหรือสัมผัส)
local tool = script.Parent
local function onEquip()
print(tool.Name, "เครื่องมือถูกสวมใส่")
end
local function onUnequip()
print(tool.Name, "เครื่องมือถูกปล่อย")
end
local function onActivate()
print(tool.Name, "เครื่องมือถูกเปิดใช้งาน")
end
local function onDeactivate()
print(tool.Name, "เครื่องมือถูกยกเลิกการเปิดใช้งาน")
end
tool.Equipped:Connect(onEquip)
tool.Unequipped:Connect(onUnequip)
tool.Activated:Connect(onActivate)
tool.Deactivated:Connect(onDeactivate)เหตุการณ์เครื่องมือจะถูกเรียกใช้เฉพาะใน LocalScripts ด้านไคลเอนต์เท่านั้น เนื่องจากอุปกรณ์ของผู้เล่นเท่านั้นที่รู้ว่าเมื่อใดที่เกิด การป้อนข้อมูล ขึ้น ดังนั้นเครื่องมือส่วนใหญ่จึงต้องการทั้ง LocalScript และ Script ด้านเซิร์ฟเวอร์ซึ่งแต่ละตัวจัดการด้านต่างๆ ของพฤติกรรมของเครื่องมือและ RemoteEvent ส่งข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์ (ดู เหตุการณ์ระยะไกลและการเรียกกลับ สำหรับข้อมูลเพิ่มเติม)
ต่อไปนี้คือตัวอย่างเครื่องมือและพฤติกรรมของพวกเขาที่จัดการโดย LocalScript หรือ Script:
| เครื่องมือ | LocalScript | Script |
|---|---|---|
| ไม้กายสิทธิ์ของผู้สร้าง | ตรวจจับว่าผู้เล่นเปิดใช้งานเครื่องมือที่ไหน (Activated()). | สร้างชิ้นส่วนใหม่ที่ตำแหน่งในโลก 3D ที่ผู้เล่นสัมผัสหรือคลิก. |
| ผ้าคลุมล่องหน | ตรวจจับเมื่อผู้เล่นสวมใส่เครื่องมือ (Equipped()) หรือปล่อยเครื่องมือ (Unequipped()). | ทำให้ผู้เล่นมองไม่เห็นต่อผู้เล่นคนอื่นในขณะที่ผ้าคลุมถูกสวมใส่และคืนผู้เล่นให้มองเห็นได้เต็มที่เมื่อปล่อยผ้าคลุม. |
| Mega‑Bow | ตรวจจับระยะเวลาที่ผู้เล่นเปิดใช้งานเครื่องมือ (เวลาระหว่าง Activated() และ Deactivated()). | ยิงลูกศรเวทมนตร์ที่มีพลังมากหรือน้อย ขึ้นอยู่กับระยะเวลาการเปิดใช้งานที่ตรวจจับได้. |
