การล่าขุมทรัพย์

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

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

การใช้งานโมดูล

การติดตั้ง

ในการใช้โมดูล ScavengerHunt ในประสบการณ์:

  1. จากเมนู Window ของ Studio หรือแถบเครื่องมือ Home ให้เปิด Toolbox และเลือกแท็บ Creator Store.

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

  3. ค้นหาและคลิกที่ tile Packages.

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

  5. ในหน้าต่าง Explorer ให้ย้ายโมเดล ScavengerHunt ทั้งหมดไปยัง ReplicatedStorage เมื่อรันประสบการณ์โมดูลจะเริ่มทำงาน

การใช้โทเค็น

โมดูลการล่าขุมทรัพย์จะใช้ โทเค็น เป็นรายการที่ผู้เล่นค้นหาและเก็บสะสม โมดูลมาพร้อมกับโมเดลโทเค็นหนึ่งตัวที่คุณสามารถวางในโลก 3D

  1. ค้นหา mesh Token1 ในโฟลเดอร์ Workspace ของโฟลเดอร์หลักของโมดูล.

  2. ย้าย Token1 ไปยังลำดับชั้น Workspace ชั้นบนสุดและวางไว้ในตำแหน่งที่ต้องการ

  3. ตั้งชื่อโทเค็นด้วย ชื่อที่ไม่ซ้ำกัน; ชื่อนี้เป็นวิธีที่โมดูลติดตามว่าแต่ละผู้เล่นได้เก็บโทเค็นอะไรไปแล้ว

  4. หากต้องการเพิ่มโทเค็นเพิ่มเติม ให้ทำการทำซ้ำโทเค็นที่มีอยู่และตั้งชื่อมันด้วยชื่อที่ไม่ซ้ำกัน

หากคุณไม่ต้องการจะใช้โทเค็น mesh ที่รวมอยู่ คุณสามารถใช้ Model หรือ BasePart อื่น ๆ ได้ ตราบใดที่มัน符合以下标准:

  • วัตถุมีแท็ก CollectionService เป็น ScavengerHuntPart หากต้องการ เปลี่ยนชื่อแท็กที่โมดูลใช้ สามารถเปลี่ยนค่าของ tokenTag ในการเรียก configureServer

  • วัตถุต้องมี StringValue instance เป็นลูกที่ตั้งค่าเป็น "flavor text" เพื่อแสดงเมื่อโทเค็นถูกเก็บ

    โมเดล
    MeshPart

การใช้ภูมิภาค

ภูมิภาคจะแตกต่างเล็กน้อยจากโทเค็น โดยเป็นพื้นที่ขนาดใหญ่ที่ถูกทำเครื่องหมายว่า "เก็บสะสม" เมื่อผู้เล่นเข้าไปในภูมิภาคนั้น นอกจากนี้เมื่อผู้เล่นออกจากภูมิภาค ข้อความรสชาติ modal จะถูกปิดโดยอัตโนมัติและภูมิภาคจะถูกลบออกจาก workspace

  1. สร้างส่วนที่ยึดอยู่รอบภูมิภาค เช่น บล็อกหรือทรงกลม โมดูลจะปิดการใช้งานการ คอลลิชั่น CanCollide ในระหว่างการทำงานเพื่อให้ผู้เล่นไม่ชนกันกับภูมิภาค

  2. ตั้งชื่อให้เป็น ชื่อที่ไม่ซ้ำกัน ชื่อนี้เป็นวิธีที่โมดูลติดตามว่าผู้เล่นคนใดเข้าไปในภูมิภาค

  3. ใช้แท็ก ScavengerHuntPart ในส่วนของคุณสมบัติของส่วนเพื่อให้ CollectionService ตรวจจับได้ หากต้องการ คุณสามารถเปลี่ยนชื่อแท็กที่โมดูลใช้ได้โดยกำหนดค่าที่แตกต่างสำหรับ tokenTag ในการเรียก configureServer

  4. รวม StringValue instance ในลูกตั้งค่าที่ "flavor text" เพื่อแสดงเมื่อเข้าไปในภูมิภาคนั้น

การกำหนดค่า

โมดูลถูกกำหนดค่าไว้ล่วงหน้าในการใช้งานส่วนใหญ่ แต่สามารถปรับแต่งได้ง่าย ตัวอย่างเช่น หากต้องการเปลี่ยนความเร็วในการหมุนโทเค็นและปรับแต่งข้อความข้อมูล modal:

  1. ใน StarterPlayerScripts ให้สร้าง LocalScript ใหม่และเปลี่ยนชื่อเป็น ConfigureScavengerHunt.

  2. วางโค้ดต่อไปนี้ลงในสคริปต์ใหม่.

    LocalScript - ConfigureScavengerHunt

    local 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
LocalScript

local 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
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

disable

disable()

ซ่อน UI ทั้งหมดสำหรับการล่าขุมทรัพย์ ตัดการเชื่อมต่อฟังก์ชันการป้อนข้อมูลทั้งหมดและป้องกันไม่ให้ผู้เล่นเก็บโทเค็นหรือมีปฏิสัมพันธ์กับภูมิภาค ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก Script เท่านั้น

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()

enable

enable()

แสดง UI ทั้งหมดสำหรับการล่าขุมทรัพย์ เชื่อมต่อฟังก์ชันการป้อนข้อมูลทั้งหมด และอนุญาตให้ผู้เล่นเก็บโทเค็นและมีปฏิสัมพันธ์กับภูมิภาค ฟังก์ชันนี้สามารถเรียกใช้งานได้จาก Script เท่านั้น

Script

local 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 สำหรับรายละเอียดและโค้ดตัวอย่าง

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ