Mô-đun TròChơiSănLùng nhà phát triển cung cấp cho người chơi một cách chơi game tự nhiên để khám phá trải nghiệm của bạn, giới thiệu cho họ toàn bộ địa điểm. Tiến trình của người chơi là liên tục, vì vậy các cuộc săn lùng có thể tiếp tục qua nhiều phiên.
Sử dụng mô-đun
Cài đặt
Để sử dụng mô-đun TròChơiSănLùng trong một trải nghiệm:
Từ menu Cửa Sổ của Studio hoặc thanh công cụ trên tab Trang Chủ, mở Hộp Công Cụ và chọn tab Cửa Hàng Người Tạo.

Đảm bảo đã chọn sắp xếp theo Mô Hình, sau đó nhấp vào nút Xem Tất Cả cho Danh Mục.

Tìm và nhấp vào ô Gói.
Tìm mô-đun Trò Chơi Săn Lùng và nhấp vào nó, hoặc kéo và thả nó vào khung nhìn 3D.

Trong cửa sổ Explorer, di chuyển toàn bộ mô hình TròChơiSănLùng vào ReplicatedStorage. Khi chạy trải nghiệm, mô-đun sẽ bắt đầu chạy.
Sử dụng token
Mô-đun trò chơi săn lùng sử dụng token như các đồ vật mà người chơi tìm kiếm và thu thập. Mô-đun này đi kèm với một mô hình token mà bạn có thể đặt trong thế giới 3D.
Tìm mesh Token1 trong thư mục Workspace của thư mục chính của mô-đun.

Di chuyển Token1 vào cấp cao nhất của phân cấp Workspace và đặt nó ở vị trí mong muốn.
Đặt cho token một tên duy nhất; tên này là cách mà mô-đun theo dõi các token mà mỗi người chơi đã thu thập.
Để thêm nhiều token hơn, hãy sao chép một token hiện có và đặt cho nó một tên duy nhất.
Nếu bạn không muốn sử dụng các token mesh đi kèm, bất kỳ Model hoặc BasePart nào cũng sẽ hoạt động, miễn là nó đáp ứng các tiêu chí sau:
Đối tượng có một thẻ CollectionService là ScavengerHuntPart. Nếu muốn, tên thẻ CollectionService mà mô-đun sử dụng có thể được thay đổi bằng cách đặt một giá trị khác cho tokenTag trong một cuộc gọi configureServer.
Đối tượng chứa một thực thể con StringValue được thiết lập để hiển thị "văn bản hương vị" khi token được thu thập.

Mô Hình 
MeshPart
Sử dụng vùng
Các vùng khác một chút so với các token, vì chúng là những khu vực lớn được đánh dấu là "đã thu thập" khi người chơi bước vào. Thêm vào đó, khi một người chơi rời khỏi vùng, hộp thoại văn bản hương vị sẽ tự động biến mất và vùng đó sẽ bị xóa khỏi không gian làm việc.
Tạo một phần có thể neo xung quanh vùng đó, chẳng hạn như một khối hoặc hình cầu. Mô-đun sẽ tự động vô hiệu hóa thuộc tính CanCollide trong thời gian chạy để người chơi không va chạm vật lý với vùng.
Đặt cho nó một tên duy nhất. Tên này là cách mà mô-đun theo dõi các vùng mà mỗi người chơi đã vào.
Sử dụng phần Thẻ của thuộc tính của phần, áp dụng thẻ ScavengerHuntPart cho phần để CollectionService phát hiện nó. Nếu muốn, tên thẻ mà mô-đun sử dụng có thể được thay đổi bằng cách đặt một giá trị khác cho tokenTag trong một cuộc gọi configureServer.
Bao gồm một thực thể con StringValue được thiết lập để hiển thị "văn bản hương vị" khi vùng được vào.

Cấu hình
Mô-đun đã được cấu hình sẵn để phù hợp với hầu hết các trường hợp sử dụng, nhưng nó có thể được tùy chỉnh dễ dàng. Ví dụ, để thay đổi tốc độ xoay của token và tùy chỉnh thông điệp thông tin modal:
Trong StarterPlayerScripts, tạo một LocalScript mới và đổi tên thành Cấu HìnhTròChơiSănLùng.
Dán mã sau vào trong script mới.
LocalScript - Cấu HìnhTròChơiSănLùnglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)TròChơiSănLùng.configureClient({infoModalText = "Chào mừng đến với Trò Chơi Săn Lùng của tôi!",completeModalText = "Cảm ơn bạn đã chơi Trò Chơi Săn Lùng của tôi!",tokenRotationSpeed = 60,})
Sự kiện thu thập
Mỗi khi một người chơi thu thập một token hoặc bước vào một vùng, sự kiện thu thập sẽ được kích hoạt. Bạn có thể nghe sự kiện này từ một Script phía máy chủ và phản hồi thích hợp. Hàm kết nối nhận được Player đã va chạm với token hoặc đã vào vùng đó và tên của token hoặc vùng đó.
Tương tự, khi một người chơi thu thập tất cả các token hoặc vào tất cả các vùng có thẻ, sự kiện tất cả đã thu thập sẽ được kích hoạt và hàm kết nối sẽ nhận Player liên quan. Hàm này chỉ được kích hoạt một lần cho mỗi người chơi và có thể được sử dụng để thưởng cho người chơi đó một huy hiệu, quyền truy cập vào một khu vực mới, tiền tệ trong trải nghiệm, v.v.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
TròChơiSănLùng.allCollected:Connect(function(player)
print(player.DisplayName .. " đã hoàn thành cuộc săn lùng!")
end)
GUI tùy chỉnh
Mô-đun này cung cấp nhiều tùy chọn để tùy chỉnh GUI mặc định của nó, nhưng bạn có thể chọn hiển thị các phần tử GUI tùy chỉnh thay thế.
Khi useCustomModals được đặt thành true trong hàm configureClient, sự kiện showInfoModal sẽ được kích hoạt mỗi khi người chơi kích hoạt theo dõi token. Tương tự, sự kiện showCompleteModal được kích hoạt khi người chơi đã thu thập tất cả trong trò chơi săn lùng. Cả hai sự kiện này đều có thể được lắng nghe trong một LocalScript.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.showInfoModal:Connect(function()
-- Hiển thị một modal thông tin tùy chỉnh
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
TròChơiSănLùng.showCompleteModal:Connect(function()
-- Hiển thị một modal hoàn tất tùy chỉnh
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Tính năng hiển thị GUI
Mặc định, trò chơi săn lùng sẽ ẩn tất cả các ScreenGuis và CoreGuis (ngoại trừ danh sách người chơi) khi hộp thoại thông tin hoặc hộp thoại hoàn thành xuất hiện. Nếu bạn muốn ghi đè hành vi ẩn tự động này và quyết định bằng lập trình các GUI nào nên vẫn hiển thị, hãy bao gồm các callback hideOtherGuis và showOtherGuis và phản hồi với logic tùy chỉnh của riêng bạn.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- Tạo một Screen GUI mà sẽ không bị ẩn
local specialGuiInstance = Instance.new("ScreenGui")
-- Vẽ Screen GUI ở trên GUI trò chơi săn lùng
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Thêm nhãn văn bản vào GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Vẫn hiển thị khi hiển thị các modal"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
TròChơiSănLùng.hideOtherGuis(function()
-- Ẩn tất cả các Screen GUI do nhà phát triển định nghĩa
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "TròChơiSănLùng" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- Ẩn các core GUI cụ thể
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
TròChơiSănLùng.showOtherGuis(function()
-- Hiển thị tất cả các Screen GUI do nhà phát triển định nghĩa mà đã bị ẩn
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Hiển thị các core GUI cụ thể đã bị ẩn
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Tham khảo API
Các hàm
configureClient
configureClient(config: table)
Ghi đè các tùy chọn cấu hình mặc định phía khách hàng thông qua các khóa/giá trị sau trong bảng config. Hàm này chỉ có thể được gọi từ một LocalScript.
| Khóa | Mô tả | Mặc định |
|---|---|---|
| autoDismissTime | Thời gian tính bằng giây trước khi modal tự động đóng hoặc chuyển sang trang tiếp theo nếu có. Đặt thành 0 để vô hiệu hóa. | 20 |
| closeModalGamepad | Nút gamepad được sử dụng để đóng các modal (Enum.KeyCode). | ButtonA |
| closeModalKeyboard | Phím bàn phím được sử dụng để đóng các modal (Enum.KeyCode). | E |
| completeModalText | Văn bản hiển thị trên modal xuất hiện sau khi nhấp vào theo dõi token khi trò chơi săn lùng hoàn thành. | "Cảm ơn bạn đã tham gia!" |
| infoModalText | Văn bản hiển thị trên modal xuất hiện sau khi nhấp vào theo dõi token. | "Tìm tất cả các token để hoàn thành cuộc săn lùng" |
| tokenRotationSpeed | Tốc độ mà các token xoay, tính bằng độ mỗi giây. Đặt thành 0 để ngăn không cho chúng xoay. | 20 |
| nextArrowImage | Hình ảnh được sử dụng để chỉ ra rằng còn nhiều trang modal hơn để hiển thị sau trang modal hiện tại. | "rbxassetid://8167172095" |
| openTokenTrackerGamepad | Nút gamepad được sử dụng để hiển thị các modal xuất hiện sau khi kích hoạt theo dõi token (Enum.KeyCode). | ButtonY |
| openTokenTrackerKeyboard | Phím bàn phím được sử dụng để hiển thị các modal xuất hiện sau khi kích hoạt theo dõi token (Enum.KeyCode). | Y |
| openTokenTrackerGamepadButtonImage | Hình ảnh cho nút gamepad được sử dụng để kích hoạt theo dõi token. | "rbxassetid://8025860488" |
| regionIcon | Biểu tượng hiển thị bên cạnh theo dõi token khi vào các vùng. | "rbxassetid://8073794624" |
| tokenIcon | Biểu tượng hiển thị bên cạnh theo dõi token khi thu thập các token. | "rbxassetid://8073794477" |
| tokenTrackerPositionSmallDevice | Vị trí của giao diện người dùng theo dõi token trên các thiết bị nhỏ như điện thoại (UDim2). | (1, 0, 0, 84) |
| tokenTrackerPositionLargeDevice | Vị trí của giao diện người dùng theo dõi token trên các thiết bị lớn hơn như máy tính bảng và PC (UDim2). | (1, 0, 1, -16) |
| useRegions | Thay vì sử dụng token, sử dụng vùng. | false |
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)TròChơiSănLùng.configureClient({infoModalText = "Chào mừng đến với Trò Chơi Săn Lùng của tôi!",completeModalText = "Cảm ơn bạn đã chơi Trò Chơi Săn Lùng của tôi!",tokenRotationSpeed = 60,navigationBeam = {lightEmission = 1},modal = {textSize = 14},})
configureServer
configureServer(config: table)
Ghi đè các tùy chọn cấu hình mặc định phía máy chủ thông qua các khóa/giá trị sau trong bảng config. Hàm này chỉ có thể được gọi từ một Script.
| Khóa | Mô tả | Mặc định |
|---|---|---|
| tokenTag | Thẻ được sử dụng bởi CollectionService để tìm tất cả các token hoặc vùng được sử dụng trong trò chơi săn lùng. | "ScavengerHuntPart" |
| datastoreName | Tên của DataStore được sử dụng bởi trò chơi săn lùng để lưu trữ tiến trình thu thập của mỗi người chơi. | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | Nếu đúng, đặt lại tiến trình của người dùng khi họ rời khỏi trải nghiệm; thuận tiện cho việc không lưu tiến trình khi thử nghiệm trò chơi săn lùng. | false |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)TròChơiSănLùng.configureServer({tokenTag = "GreenGem",})
disable
disable()
Ẩn tất cả giao diện người dùng cho trò chơi săn lùng, ngắt kết nối tất cả các trình nghe sự kiện đầu vào và ngăn người chơi thu thập token hoặc tương tác với các vùng. Hàm này chỉ có thể được gọi từ một Script.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)TròChơiSănLùng.disable()
enable
enable()
Hiển thị tất cả giao diện người dùng cho trò chơi săn lùng, kết nối tất cả các trình nghe sự kiện đầu vào và cho phép người chơi thu thập token và tương tác với các vùng. Hàm này chỉ có thể được gọi từ một Script.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)TròChơiSănLùng.enable()
Sự kiện
collected
Kích hoạt khi một người chơi va chạm với một token hoặc vào một vùng. Hàm kết nối sẽ nhận được Player đã va chạm với token hoặc vào vùng và tên của token đã va chạm hoặc vùng đã vào. Sự kiện này chỉ có thể được kết nối trong một Script.
| Tham số | |
|---|---|
| player: Player | Người dùng đã va chạm với một token hoặc vào một vùng. |
| itemName: string | Tên của token đã va chạm hoặc vùng đã vào. |
| totalCollected: number | Tổng số token đã thu thập bởi người dùng được đại diện bởi player. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
allCollected
Kích hoạt khi một người chơi thu thập tất cả token hoặc vào tất cả vùng trong trò chơi săn lùng. Hàm kết nối sẽ nhận được Player đã thu thập tất cả token, và nó chỉ được kích hoạt một lần cho mỗi người chơi. Sự kiện này chỉ có thể được kết nối trong một Script.
| Tham số | |
|---|---|
| player: Player | Người chơi đã thu thập tất cả token hoặc vào tất cả vùng. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.allCollected:Connect(function(player)
print(player.DisplayName .. " đã hoàn thành cuộc săn lùng!")
end)
showInfoModal
Kích hoạt khi người chơi nhấp vào theo dõi token khi tùy chọn useCustomModals cấu hình được đặt thành true. Sự kiện này chỉ có thể được kết nối trong một LocalScript.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)
showCompleteModal
Kích hoạt khi người chơi nhấp vào theo dõi token khi tùy chọn useCustomModals cấu hình được đặt thành true và người chơi đã thu thập tất cả token trong trò chơi săn lùng. Sự kiện này chỉ có thể được kết nối trong một LocalScript.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TròChơiSănLùng = require(ReplicatedStorage.TròChơiSănLùng)
TròChơiSănLùng.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)
Callback
hideOtherGuis
hideOtherGuis(callback: function)
Callback này chạy ngay trước khi một modal được hiển thị, cho phép bạn vô hiệu hóa toàn bộ ScreenGuis hoặc các phần tử bên trong chúng trước khi modal được hiển thị. Xem Tính năng hiển thị GUI để biết thêm chi tiết và mã mẫu.
showOtherGuis
showOtherGuis(callback: function)
Callback này chạy ngay sau khi một modal đã được đóng, cho phép bạn kích hoạt toàn bộ ScreenGuis hoặc các phần tử bên trong chúng. Xem Tính năng hiển thị GUI để biết thêm chi tiết và mã mẫu.