การล่าขุมทรัพย์ ScavengerHunt โมดูลสำหรับนักพัฒนา ให้ผู้เล่นมีวิธีการสำรวจประสบการณ์ในแบบที่มีการเล่นเกมในตัว โดยแนะนำให้พวกเขารู้จักกับสถานที่ทั้งหมดอย่างเป็นธรรมชาติ ความก้าวหน้าของผู้เล่นจะถาวร ดังนั้นการล่าขุมทรัพย์จึงสามารถดำเนินการต่อได้ในระหว่างเซสชัน
การใช้งานโมดูล
การติดตั้ง
ในการใช้โมดูล ScavengerHunt ในประสบการณ์:
จากเมนู Window ของ Studio หรือแถบเครื่องมือ Home ให้เปิด Toolbox และเลือกแท็บ Creator Store.

ตรวจสอบให้แน่ใจว่าได้เลือกการเรียงลำดับ Models แล้ว คลิกที่ปุ่ม See All สำหรับ Categories.

ค้นหาและคลิกที่ tile Packages.
ค้นหาโมดูล Scavenger Hunt และคลิกที่โมดูลหรือลากและวางเข้าไปในมุมมอง 3D.

ในหน้าต่าง Explorer ให้ย้ายโมเดล ScavengerHunt ทั้งหมดไปยัง ReplicatedStorage เมื่อรันประสบการณ์โมดูลจะเริ่มทำงาน
การใช้โทเค็น
โมดูลการล่าขุมทรัพย์จะใช้ โทเค็น เป็นรายการที่ผู้เล่นค้นหาและเก็บสะสม โมดูลมาพร้อมกับโมเดลโทเค็นหนึ่งตัวที่คุณสามารถวางในโลก 3D
ค้นหา mesh Token1 ในโฟลเดอร์ Workspace ของโฟลเดอร์หลักของโมดูล.

ย้าย Token1 ไปยังลำดับชั้น Workspace ชั้นบนสุดและวางไว้ในตำแหน่งที่ต้องการ
ตั้งชื่อโทเค็นด้วย ชื่อที่ไม่ซ้ำกัน; ชื่อนี้เป็นวิธีที่โมดูลติดตามว่าแต่ละผู้เล่นได้เก็บโทเค็นอะไรไปแล้ว
หากต้องการเพิ่มโทเค็นเพิ่มเติม ให้ทำการทำซ้ำโทเค็นที่มีอยู่และตั้งชื่อมันด้วยชื่อที่ไม่ซ้ำกัน
หากคุณไม่ต้องการจะใช้โทเค็น mesh ที่รวมอยู่ คุณสามารถใช้ Model หรือ BasePart อื่น ๆ ได้ ตราบใดที่มัน符合以下标准:
วัตถุมีแท็ก CollectionService เป็น ScavengerHuntPart หากต้องการ เปลี่ยนชื่อแท็กที่โมดูลใช้ สามารถเปลี่ยนค่าของ tokenTag ในการเรียก configureServer
วัตถุต้องมี StringValue instance เป็นลูกที่ตั้งค่าเป็น "flavor text" เพื่อแสดงเมื่อโทเค็นถูกเก็บ

โมเดล 
MeshPart
การใช้ภูมิภาค
ภูมิภาคจะแตกต่างเล็กน้อยจากโทเค็น โดยเป็นพื้นที่ขนาดใหญ่ที่ถูกทำเครื่องหมายว่า "เก็บสะสม" เมื่อผู้เล่นเข้าไปในภูมิภาคนั้น นอกจากนี้เมื่อผู้เล่นออกจากภูมิภาค ข้อความรสชาติ modal จะถูกปิดโดยอัตโนมัติและภูมิภาคจะถูกลบออกจาก workspace
สร้างส่วนที่ยึดอยู่รอบภูมิภาค เช่น บล็อกหรือทรงกลม โมดูลจะปิดการใช้งานการ คอลลิชั่น CanCollide ในระหว่างการทำงานเพื่อให้ผู้เล่นไม่ชนกันกับภูมิภาค
ตั้งชื่อให้เป็น ชื่อที่ไม่ซ้ำกัน ชื่อนี้เป็นวิธีที่โมดูลติดตามว่าผู้เล่นคนใดเข้าไปในภูมิภาค
ใช้แท็ก ScavengerHuntPart ในส่วนของคุณสมบัติของส่วนเพื่อให้ CollectionService ตรวจจับได้ หากต้องการ คุณสามารถเปลี่ยนชื่อแท็กที่โมดูลใช้ได้โดยกำหนดค่าที่แตกต่างสำหรับ tokenTag ในการเรียก configureServer
รวม StringValue instance ในลูกตั้งค่าที่ "flavor text" เพื่อแสดงเมื่อเข้าไปในภูมิภาคนั้น

การกำหนดค่า
โมดูลถูกกำหนดค่าไว้ล่วงหน้าในการใช้งานส่วนใหญ่ แต่สามารถปรับแต่งได้ง่าย ตัวอย่างเช่น หากต้องการเปลี่ยนความเร็วในการหมุนโทเค็นและปรับแต่งข้อความข้อมูล modal:
ใน StarterPlayerScripts ให้สร้าง LocalScript ใหม่และเปลี่ยนชื่อเป็น ConfigureScavengerHunt.
วางโค้ดต่อไปนี้ลงในสคริปต์ใหม่.
LocalScript - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "ยินดีต้อนรับสู่การล่าขุมทรัพย์ของฉัน!",completeModalText = "ขอบคุณที่เล่นการล่าขุมทรัพย์ของฉัน!",tokenRotationSpeed = 60,})
เหตุการณ์การเก็บสะสม
ทุกครั้งที่ผู้เล่นเก็บโทเค็นหรือเข้าไปในภูมิภาค เหตุการณ์ collected จะถูกเรียกใช้งาน คุณสามารถเฝ้าฟังเหตุการณ์นี้จาก Script ด้านเซิร์ฟเวอร์และตอบสนองได้ตามต้องการ ฟังก์ชันที่เชื่อมต่อจะได้รับ Player ที่ชนกับโทเค็นหรือเข้าไปในภูมิภาคและชื่อของโทเค็นหรือภูมิภาคนั้น
เช่นเดียวกัน เมื่อลูกค้าเก็บ โทเค็นทั้งหมด หรือเข้าไปใน ภูมิภาคทั้งหมด ที่มีการติดแท็ก เหตุการณ์ allCollected จะถูกเรียกใช้งานซึ่งฟังก์ชันที่เชื่อมต่อจะได้รับ Player ที่เกี่ยวข้อง ฟังก์ชันนี้จะถูกเรียกใช้งานเพียงครั้งเดียวต่อผู้เล่นและสามารถใช้เพื่อให้รางวัลแก่ผู้เล่นนั้นด้วย badge หรือเข้าถึงพื้นที่ใหม่ สกุลเงินในประสบการณ์ เป็นต้น
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " เสร็จสิ้นการล่า!")
end)
GUI ที่กำหนดเอง
โมดูลนี้เปิดเผยหลายตัวเลือกในการปรับแต่ง GUI เริ่มต้น แต่คุณสามารถเลือกที่จะแสดงส่วน GUI ที่กำหนดเองแทน
เมื่อ useCustomModals ถูกตั้งค่าเป็น true ในฟังก์ชัน configureClient เหตุการณ์ showInfoModal จะถูกเรียกทุกครั้งที่ผู้เล่นเปิดใช้งานตัวติดตามโทเค็น นอกจากนี้ เหตุการณ์ showCompleteModal จะถูกเรียกเมื่อผู้เล่นเก็บทุกอย่างในขบวนการล่าขุมทรัพย์ ทั้งสองเหตุการณ์นี้สามารถเฝ้าฟังได้ใน LocalScript
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- แสดง modal ข้อมูลกำหนดเอง
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- แสดง modal เสร็จสิ้นกำหนดเอง
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
การมองเห็นของ GUI
ตามค่าเริ่มต้น การล่าขุมทรัพย์จะซ่อน ScreenGuis และ CoreGuis ทั้งหมด (ยกเว้นสำหรับรายชื่อผู้เล่น) เมื่อ modal ข้อมูลหรือ modal เสร็จสิ้นปรากฏขึ้น หากคุณต้องการจะแก้ไขพฤติกรรมการซ่อนอัตโนมัตินี้และตัดสินใจในโปรแกรมว่าควรให้ GUI อะไรคงอยู่ ให้รวมการเรียก hideOtherGuis และ showOtherGuis และตอบสนองด้วยตรรกะที่กำหนดเองของคุณ
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- สร้าง Screen GUI ที่จะไม่ถูกซ่อน
local specialGuiInstance = Instance.new("ScreenGui")
-- วาดหน้าจอ GUI ด้านบนของ GUI การล่าขุมทรัพย์
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- เพิ่ม TextLabel ใน GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "ยังคงมองเห็นได้เมื่อแสดง modal"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- ซ่อน Screen GUI ทั้งหมดที่นักพัฒนากำหนด
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- ซ่อน Core GUI ที่เฉพาะเจาะจง
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- แสดง Screen GUI ทั้งหมดที่นักพัฒนากำหนดซึ่งได้ถูกซ่อน
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- แสดง Core GUI ที่เฉพาะเจาะจงซึ่งได้ถูกซ่อน
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
เอกสารการ API
ฟังก์ชัน
configureClient
configureClient(config: table)
เขียนทับค่าการกำหนดค่าภาคลูกค้าตามค่าคีย์ในตาราง config ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก LocalScript เท่านั้น
| คีย์ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| autoDismissTime | เวลาหน่วยเป็นวินาทีก่อนที่ modal จะถูกปิดตนเองโดยอัตโนมัติหรือไปยังหน้าอื่นหากมี ตั้งค่าเป็น 0 เพื่อไม่ให้ปิด | 20 |
| closeModalGamepad | ปุ่มเกมแพดที่ใช้ปิด modal (Enum.KeyCode). | ButtonA |
| closeModalKeyboard | ปุ่มคีย์บอร์ดที่ใช้ปิด modal (Enum.KeyCode). | E |
| completeModalText | ข้อความที่แสดงใน modal หลังจากคลิกที่ตัวติดตามโทเค็นเมื่อการล่าขุมทรัพย์เสร็จสิ้น. | "ขอบคุณที่เข้าร่วม!" |
| infoModalText | ข้อความที่แสดงใน modal หลังจากคลิกที่ตัวติดตามโทเค็น. | "ค้นหาโทเค็นทั้งหมดเพื่อที่จะเสร็จสิ้นการล่า" |
| tokenRotationSpeed | ความเร็วในการหมุนของโทเค็น หน่วยเป็นองศาต่อวินาที ตั้งค่าเป็น 0 เพื่อป้องกันการหมุน. | 20 |
| nextArrowImage | รูปภาพที่ใช้บ่งชี้ว่ามีหน้าของ modal เพิ่มเติมจะแสดงหลังจากหน้าปัจจุบัน. | "rbxassetid://8167172095" |
| openTokenTrackerGamepad | ปุ่มเกมแพดที่ใช้ในการแสดง modal ที่ปรากฏหลังจากเปิดใช้งานตัวติดตามโทเค็น (Enum.KeyCode). | ButtonY |
| openTokenTrackerKeyboard | ปุ่มคีย์บอร์ดที่ใช้แสดง modal ที่ปรากฏหลังจากเปิดใช้งานตัวติดตามโทเค็น (Enum.KeyCode). | Y |
| openTokenTrackerGamepadButtonImage | รูปภาพสำหรับปุ่มเกมแพดที่ใช้เปิดใช้งานตัวติดตามโทเค็น. | "rbxassetid://8025860488" |
| regionIcon | ไอคอนที่แสดงข้างตัวติดตามโทเค็นเมื่อเข้าไปในภูมิภาค. | "rbxassetid://8073794624" |
| tokenIcon | ไอคอนที่แสดงข้างตัวติดตามโทเค็นเมื่อเก็บโทเค็น. | "rbxassetid://8073794477" |
| tokenTrackerPositionSmallDevice | ตำแหน่งของ UI ตัวติดตามโทเค็นในอุปกรณ์ขนาดเล็ก เช่น โทรศัพท์ (UDim2). | (1, 0, 0, 84) |
| tokenTrackerPositionLargeDevice | ตำแหน่งของ UI ตัวติดตามโทเค็นในอุปกรณ์ขนาดใหญ่ เช่น แท็บเล็ตและ PC (UDim2). | (1, 0, 1, -16) |
| useRegions | แทนที่จะใช้ โทเค็น ใช้ ภูมิภาค. | false |
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "ยินดีต้อนรับสู่การล่าขุมทรัพย์ของฉัน!",completeModalText = "ขอบคุณที่เล่นการล่าขุมทรัพย์ของฉัน!",tokenRotationSpeed = 60,navigationBeam = {lightEmission = 1},modal = {textSize = 14},})
configureServer
configureServer(config: table)
เขียนทับค่าการกำหนดค่าของเซิร์ฟเวอร์ตามค่าคีย์ในตาราง config ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก Script เท่านั้น
| คีย์ | คำอธิบาย | ค่าเริ่มต้น |
|---|---|---|
| tokenTag | แท็กที่ใช้โดย CollectionService เพื่อค้นหาโทเค็นหรือภูมิภาคทั้งหมดที่ใช้ในการล่าขุมทรัพย์. | "ScavengerHuntPart" |
| datastoreName | ชื่อของ DataStore ที่ใช้โดยการล่าขุมทรัพย์เพื่อจัดเก็บความก้าวหน้าการเก็บสะสมของผู้เล่นแต่ละคน. | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | หากเป็นจริง จะรีเซ็ตความก้าวหน้าของผู้ใช้เมื่อพวกเขาออกจากประสบการณ์ ซึ่งสะดวกสำหรับการไม่บันทึกความก้าวหน้าขณะทดสอบการล่าขุมทรัพย์. | false |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disable
disable()
ซ่อน UI ทั้งหมดสำหรับการล่าขุมทรัพย์ ตัดการเชื่อมต่อฟังก์ชันการป้อนข้อมูลทั้งหมดและป้องกันไม่ให้ผู้เล่นเก็บโทเค็นหรือมีปฏิสัมพันธ์กับภูมิภาค ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก Script เท่านั้น
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.disable()
enable
enable()
แสดง UI ทั้งหมดสำหรับการล่าขุมทรัพย์ เชื่อมต่อฟังก์ชันการป้อนข้อมูลทั้งหมด และอนุญาตให้ผู้เล่นเก็บโทเค็นและมีปฏิสัมพันธ์กับภูมิภาค ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก Script เท่านั้น
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.enable()
เหตุการณ์
collected
เกิดขึ้นเมื่อผู้เล่นชนกับโทเค็นหรือเข้าไปยังภูมิภาค ฟังก์ชันที่เชื่อมต่อจะได้รับ Player ที่ชนกับโทเค็นหรือเข้าไปในภูมิภาคและชื่อของโทเค็นที่ชนกันหรืชื่อของภูมิภาคที่เข้าไป เหตุการณ์นี้สามารถเชื่อมต่อได้ใน Script เท่านั้น
| พารามิเตอร์ | |
|---|---|
| player: Player | ผู้ใช้ที่ชนกับโทเค็นหรือเข้าไปในภูมิภาค. |
| itemName: string | ชื่อของโทเค็นที่ชนกันหรือภูมิภาคที่เข้าไป. |
| totalCollected: number | จำนวนโทเค็นทั้งหมดที่เก็บโดยผู้ใช้ที่ระบุโดย player. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
allCollected
เกิดขึ้นเมื่อผู้เล่นเก็บโทเค็นทั้งหมดหรือเข้าไปในภูมิภาคทั้งหมดในการล่าขุมทรัพย์ ฟังก์ชันที่เชื่อมต่อจะได้รับ Player ที่เก็บโทเค็นทั้งหมด ซึ่งจะถูกเรียกเพียงครั้งเดียวต่อผู้เล่น เหตุการณ์นี้สามารถเชื่อมต่อได้ใน Script เท่านั้น
| พารามิเตอร์ | |
|---|---|
| player: Player | ผู้เล่นที่เก็บโทเค็นทั้งหมดหรือเข้าไปในภูมิภาคทั้งหมด. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " เสร็จสิ้นการล่า!")
end)
showInfoModal
เกิดขึ้นเมื่อผู้เล่นคลิกที่ตัวติดตามโทเค็นเมื่อเลือกตั้งค่า useCustomModals การกำหนดค่า เป็นจริง เหตุการณ์นี้สามารถเชื่อมต่อได้ใน LocalScript เท่านั้น
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)
showCompleteModal
เกิดขึ้นเมื่อผู้เล่นคลิกที่ตัวติดตามโทเค็นเมื่อเลือกตั้งค่า useCustomModals การกำหนดค่า ไว้เป็น true และผู้เล่นได้เก็บโทเค็นทั้งหมดในการล่าขุมทรัพย์แล้ว เหตุการณ์นี้สามารถเชื่อมต่อได้ใน LocalScript เท่านั้น
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)
การเรียกกลับ
hideOtherGuis
hideOtherGuis(callback: function)
การเรียกกลับนี้จะดำเนินการทันที ก่อนที่ modal จะถูกแสดง ช่วยให้คุณปิดการใช้งาน ScreenGuis ทั้งหมดหรือตัวคุณสมบัติภายในก่อนที่ modal จะแสดง ดู GUI Visibility สำหรับรายละเอียดและโค้ดตัวอย่าง
showOtherGuis
showOtherGuis(callback: function)
การเรียกกลับนี้จะดำเนินการทันที หลังจากที่ modal ได้ถูกปิดเพื่ออนุญาตให้เปิดใช้งาน ScreenGuis ทั้งหมดหรือองค์ประกอบภายใน ดู GUI Visibility สำหรับรายละเอียดและโค้ดตัวอย่าง