Polowanie na skarby

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Moduł ScavengerHunt dewelopera daje graczom wbudowany w grę sposób eksploracji Twojego doświadczenia, organicznie wprowadzając ich do całego miejsca. Postęp gracza jest trwały, więc polowania na skarby mogą trwać przez wiele sesji.

Użycie modułu

Instalacja

Aby użyć modułu ScavengerHunt w doświadczeniu:

  1. Z menu Okno w Studio lub pasku narzędzi zakładki Strona główna, otwórz Toolbox i wybierz zakładkę Sklep twórcy.

  2. Upewnij się, że jest wybrane sortowanie Modele, a następnie kliknij przycisk Zobacz wszystkie dla Kategorii.

  3. Zlokalizuj i kliknij kafelek Pakiety.

  4. Zlokalizuj moduł Polowanie na skarby i kliknij go, lub przeciągnij i upuść go w widoku 3D.

  5. W oknie Eksploratora przenieś cały model ScavengerHunt do ReplicatedStorage. Po uruchomieniu doświadczenia, moduł zacznie działać.

Użycie tokenów

Moduł polowania na skarby używa tokenów jako przedmiotów, których gracze poszukują i zbierają. Moduł zawiera jeden model tokena, który możesz umieścić w trójwymiarowym świecie.

  1. Zlokalizuj siatkę Token1 w folderze Workspace głównego folderu modułu.

  2. Przenieś Token1 do najwyższego poziomu hierarchii Workspace i umieść go w pożądanym miejscu.

  3. Nadaj tokenowi unikalną nazwę; ta nazwa służy modułowi do śledzenia, które tokeny każdy gracz zebrał.

  4. Aby dodać więcej tokenów, skopiuj istniejący token i nadaj mu unikalną nazwę.

Jeśli nie chcesz używać dołączonych modeli tokenów, każde Model lub BasePart będzie działać, o ile spełnia następujące kryteria:

  • Obiekt ma etykietę CollectionService o nazwie ScavengerHuntPart. W razie potrzeby nazwę etykiety CollectionService, której używa moduł, można zmienić, ustawiając inną wartość dla tokenTag w wywołaniu configureServer.

  • Obiekt zawiera instancję podrzędną StringValue ustawioną na "smak tekstu", który ma być wyświetlany po zebraniu tokena.

    Model
    MeshPart

Użycie regionów

Regiony różnią się nieco od tokenów, ponieważ są to duże obszary, które są oznaczane jako "zebrane" po wejściu przez gracza. Dodatkowo, gdy gracz opuszcza region, modale z tekstem smakowym automatycznie się zamykają, a sam region jest usuwany z workspace.

  1. Utwórz zakotwiconą część wokół regionu, taką jak blok lub kula. Moduł automatycznie wyłączy właściwość CanCollide w czasie rzeczywistym, aby gracze nie kolidowali z regionem fizycznie.

  2. Nadaj mu unikalną nazwę. Ta nazwa służy modułowi do śledzenia, które regiony każdy gracz wszedł.

  3. Używając sekcji Tagi właściwości części, zastosuj etykietę ScavengerHuntPart do części, aby CollectionService ją wykryło. W razie potrzeby nazwę etykiety, którą używa moduł, można zmienić, ustawiając inną wartość dla tokenTag w wywołaniu configureServer.

  4. Dołącz instancję podrzędną StringValue ustawioną na "smak tekstu", który ma być wyświetlany po wejściu do regionu.

Konfiguracja

Moduł jest wstępnie skonfigurowany do działania w większości przypadków użycia, ale można go łatwo dostosować. Na przykład, aby zmienić prędkość rotacji tokenów i spersonalizować informację modalną:

  1. W StarterPlayerScripts utwórz nowy LocalScript i zmień jego nazwę na ConfigureScavengerHunt.

  2. Wklej następujący kod do nowego skryptu.

    LocalScript - ConfigureScavengerHunt

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
    ScavengerHunt.configureClient({
    infoModalText = "Witaj w moim Polowaniu na skarby!",
    completeModalText = "Dziękuję za udział w moim Polowaniu na skarby!",
    tokenRotationSpeed = 60,
    })

Wydarzenia zebrań

Za każdym razem, gdy gracz zbiera token lub wchodzi do regionu, wyzwolone zostaje wydarzenie collected. Możesz nasłuchiwać tego wydarzenia z poziomu serwera Script i odpowiednio na nie reagować. Podłączona funkcja odbiera Player, który zderzył się z tokenem lub wszedł do regionu oraz nazwę tego tokena lub regionu.

Podobnie, gdy gracz zbiera wszystkie tokeny lub wchodzi do wszystkich oznaczonych regionów, wyzwolone zostaje wydarzenie allCollected i podłączona funkcja odbiera powiązanego Player. Ta funkcja jest wywoływana tylko raz na gracza i może być użyta do nagrodzenia tego gracza odznaką, dostępem do nowego obszaru, walutą w doświadczeniu itp.

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 .. " ukończył polowanie!")
end)

Niestandardowe GUI

Ten moduł oferuje kilka opcji do dostosowania domyślnego GUI, ale możesz zdecydować się na wyświetlenie zamiast tego elementów GUI niestandardowych.

Gdy useCustomModals jest ustawione na true w funkcji configureClient, wyzwolone zostaje wydarzenie showInfoModal za każdym razem, gdy gracz aktywuje tracker tokenów. Podobnie, wydarzenie showCompleteModal wyzwala się, gdy gracz zebrał wszystko w polowaniu na skarby. Oba te wydarzenia można nasłuchiwać w LocalScript.

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- Pokaż niestandardowe info modal
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Pokaż niestandardowe complete modal
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

Widoczność GUI

Domyślnie polowanie na skarby ukrywa wszystkie ScreenGuis i CoreGuis (z wyjątkiem listy graczy), gdy modal z informacją lub skończeniem się pojawia. Jeśli chcesz nadpisać to automatyczne ukrywanie i programowo zdecydować, które GUI powinny pozostać widoczne, dołącz wywołania zwrotne hideOtherGuis i showOtherGuis i zareaguj swoją własną logiką.

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 = {}
-- Utwórz ekranowe GUI, które nie zostanie ukryte
local specialGuiInstance = Instance.new("ScreenGui")
-- Narysuj ekranowe GUI nad GUI polowania na skarby
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Dodaj etykietę tekstową do GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Pozostaje widoczne podczas wyświetlania modalów"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Ukryj wszystkie ekranowe GUI zdefiniowane przez dewelopera
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
-- Ukryj określone core GUI
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Pokaż wszystkie ekranowe GUI zdefiniowane przez dewelopera, które były ukryte
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Pokaż określone core GUI, które były ukryte
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

Odnośnik do API

Funkcje

configureClient

configureClient(config: table)

Nadpisuje domyślne opcje konfiguracji po stronie klienta poprzez następujące klucze/wartości w tabeli config. Ta funkcja może być wywołana tylko z LocalScript.

KluczOpisDomyślnie
autoDismissTimeCzas w sekundach, przed automatycznym zamknięciem modalu lub przejściem do następnej strony, jeśli taka istnieje. Ustaw na 0, aby wyłączyć.20
closeModalGamepadPrzycisk na kontrolerze używany do zamykania modalów (Enum.KeyCode).ButtonA
closeModalKeyboardKlucz na klawiaturze używany do zamykania modalów (Enum.KeyCode).E
completeModalTextTekst do wyświetlenia na modal, który pojawia się po kliknięciu trackera tokenów, gdy polowanie na skarby jest zakończone."Dziękuję za udział!"
infoModalTextTekst do wyświetlenia na modal, który pojawia się po kliknięciu trackera tokenów."Znajdź wszystkie tokeny, aby ukończyć polowanie"
tokenRotationSpeedPrędkość, z jaką tokeny się obracają, w stopniach na sekundę. Ustaw na 0, aby zapobiec rotacji.20
nextArrowImageObrazek używany do wskazania, że są dostępne kolejne strony modalów po bieżącej stronie."rbxassetid://8167172095"
openTokenTrackerGamepadPrzycisk na kontrolerze używany do wyświetlenia modalów, które pojawiają się po aktywacji trackera tokenów (Enum.KeyCode).ButtonY
openTokenTrackerKeyboardKlucz na klawiaturze używany do wyświetlenia modalów, które pojawiają się po aktywacji trackera tokenów (Enum.KeyCode).Y
openTokenTrackerGamepadButtonImageObrazek przycisku kontrolera, który jest używany do aktywacji trackera tokenów."rbxassetid://8025860488"
regionIconIkona wyświetlana obok trackera tokenów przy wchodzeniu do regionów."rbxassetid://8073794624"
tokenIconIkona wyświetlana obok trackera tokenów podczas zbierania tokenów."rbxassetid://8073794477"
tokenTrackerPositionSmallDevicePozycja interfejsu użytkownika trackera tokenów na małych urządzeniach, takich jak telefony (UDim2).(1, 0, 0, 84)
tokenTrackerPositionLargeDevicePozycja interfejsu użytkownika trackera tokenów na większych urządzeniach, takich jak tablety i PC (UDim2).(1, 0, 1, -16)
useRegionsZamiast tokenów, użyj regionów.false
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "Witaj w moim Polowaniu na skarby!",
completeModalText = "Dziękuję za udział w moim Polowaniu na skarby!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

configureServer

configureServer(config: table)

Nadpisuje domyślne opcje konfiguracji po stronie serwera poprzez następujące klucze/wartości w tabeli config. Ta funkcja może być wywołana tylko z Script.

KluczOpisDomyślnie
tokenTagTag używany przez CollectionService do znajdowania wszystkich tokenów lub regionów używanych w polowaniu na skarby."ScavengerHuntPart"
datastoreNameNazwa DataStore używanego przez polowanie na skarby do przechowywania postępów zbierania każdego gracza."ScavengerHuntTokens"
resetOnPlayerRemovingJeśli prawda, resetuje postęp użytkownika, gdy opuszcza doświadczenie; wygodne do niezapisywania postępów podczas testowania polowania na skarby.false
Script

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

disable

disable()

Ukrywa wszystkie UI dla polowania na skarby, odłącza wszystkie słuchacze wydarzeń wejściowych i uniemożliwia graczom zbieranie tokenów lub interakcję z regionami. Ta funkcja może być wywołana tylko z Script.

Script

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

enable

enable()

Wyświetla wszystkie UI dla polowania na skarby, łączy wszystkie słuchacze wydarzeń wejściowych i pozwala graczom zbierać tokeny i interagować z regionami. Ta funkcja może być wywołana tylko z Script.

Script

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

Wydarzenia

collected

Wyzwala się, gdy gracz zderza się z tokenem lub wchodzi do regionu. Podłączona funkcja otrzyma Player, który zderzył się z tokenem lub wszedł do regionu oraz nazwę tokena, w który zderzył się lub regionu, do którego wszedł. To wydarzenie może być podłączone tylko w Script.

Parametry
player: PlayerUżytkownik, który zderzył się z tokenem lub wszedł do regionu.
itemName: string Nazwa tokena, w który zderzył się lub regionu, do którego wszedł.
totalCollected: numberŁączna liczba tokenów zebranych przez użytkownika reprezentowanego przez 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

Wyzwala się, gdy gracz zbiera wszystkie tokeny lub wchodzi do wszystkich regionów w polowaniu na skarby. Podłączona funkcja otrzyma Player, który zebrał wszystkie tokeny, i jest wywoływana tylko raz na gracza. To wydarzenie może być podłączone tylko w Script.

Parametry
player: PlayerGracz, który zebrał wszystkie tokeny lub wszedł do wszystkich regionów.
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " ukończył polowanie!")
end)

showInfoModal

Wyzwala się, gdy gracz klika na tracker tokenów, gdy opcja konfiguracji useCustomModals configuracja jest ustawiona na prawda. To wydarzenie może być podłączone tylko w 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

Wyzwala się, gdy gracz klika na tracker tokenów, gdy opcja konfiguracji useCustomModals configuracja jest ustawiona na prawda, a gracz zebrał wszystkie tokeny w polowaniu na skarby. To wydarzenie może być podłączone tylko w 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)

Wywołania zwrotne

hideOtherGuis

hideOtherGuis(callback: function)

To wywołanie zwrotne działa natychmiast przed wyświetleniem modalu, pozwalając Ci dezaktywować całe ScreenGuis lub elementy w ich obrębie przed wyświetleniem modalu. Zobacz Widoczność GUI po szczegóły i przykładowy kod.

showOtherGuis

showOtherGuis(callback: function)

To wywołanie zwrotne działa natychmiast po zamknięciu modalu, pozwalając Ci aktywować całe ScreenGuis lub elementy w ich obrębie. Zobacz Widoczność GUI po szczegóły i przykładowy kod.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.