Polowanie na skarb

*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.

ScavengerHuntmoduł rozwoju daje graczom sposób na eksplorację Twojego doświadczenia, wprowadzając je w nienaturalny sposób w całe miejsce. Postęp gracza jest trwały, więc polowania na skarbówki mogą trwać między sesjami.

Użyj modułu

Instalacja

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

  1. Z zakładki Zobacz, otwórz Skrzynię narzędzi i wybierz Sklep z twórcami.

    Toolbox toggle button in Studio
  2. Upewnij się, że Modele sortowanie jest zaznaczone, a następnie kliknij przycisk Zobacz wszystko dla Kategorie.

  3. Lokalizuj i klikaj na płytę Moduły Rozwoju .

  4. Lokalizuj moduł Polowanie na Skarb i kliknij na nie lub przeciągnij go do 3D-wizualizacji.

  5. W oknie Explorer przenieś cały ScavengerHunt model do ServerScriptService . Po uruchomieniu doświadczenia moduł zostanie rozdzielony na różne usługi i zacznie działać.

Używanie Tokenów

Moduł polowanie na skarb używa tokenów jako przedmiotów, które gracze szukają i zbierają. Moduł kompletywny z jednym modelem tokenów, który można pozycjonować w świecie 3D.

  1. Lokalizuj Token1 siatkę w Workspace działce modułu głównego.

  2. Przenieś Token1 do najwyższego poziomu Workspace i umieść go w dowolnym miejscu.

  3. Daj tokenowi unikalne imię ; to imię jest sposobem, w jaki moduł śledzi każde zebrane przez gracza tokeni.

  4. Aby dodać więcej tokenów, duplikuj już istniejący token i nadaj mu unikalne imię.

Jeśli nie chcesz używać zestawionych tokenów siatki, dowolne Model lub BasePart zadziała, o ile spełnia następujące kryteria:

  • Obiekt ma tag CollectionService z tagiem ScavengerHuntPart . Jeśli chcesz, można zmienić nazwę tagu CollectionService , którą moduł używa, poprzez ustawienie innej wartości dla 1> tokenTag1> w wezwaniu 4> konfigurujServer4>.

  • Obiekt zawiera dziecko StringValue instancję ustawioną na „flavor tekst”, aby wyświetlić, gdy token zostanie zebrany.

    Model)
    MeshPart

Używanie regionów

Regiony różnią się nieco od tokenów, ponieważ duże obszary, które są oznaczone jako "zebrane", zostają automatycznie usuwane po wpisaniu ich przez gracza. Dodatkowo, gdy gracz opuści region, ten sam smak tekstowy automatycznie odrzuca i region sam w sobie jest usuwany z przestrzeni roboczej.

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

  2. Daj unikalne imię . To imię jest używane do śledzenia regionów, które każdy gracz wszedł.

  3. Używając sekcji Tagi właściwości części lub Studio's Tag Editor, zastosuj tag ScavengerHuntPart na części, aby 1> Class.CollectionService1> wykrył go. Jeśli chcesz, można zmienić nazwę tagu, którą modu

  4. Zawierz StringValue instancję z ustawionym na "flavor text" wyświetlanym, gdy region jest wpisany.

Konfiguracja

Moduł jest zaprojektowany tak, aby działał dla większości przypadków użycia, ale można go łatwo dostosować. Na przykład, aby zmienić szybkość obrotu tokenów i dostosować wiadomość o informacjach modalsnych:

  1. W StarterPlayerScripts utwórz nowy LocalScript i zmień go na ConfigureScavengerHunt .

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

    Lokalny Skrypt - Konfiguruj Polowanie na Skarb

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
    ScavengerHunt.configureClient({
    infoModalText = "Welcome to my Scavenger Hunt!",
    completeModalText = "Thanks for playing my Scavenger Hunt!",
    tokenRotationSpeed = 60,
    })

Wydarzenia kolekcji

Za każdym razem, gdy gracz zbiera token lub wchodzi do regionu, wydarzenie zebrane aktywuje się. Możesz słuchać tego wydarzenia z poziomu serwera Script i odpowiedzieć na niego. Funkcja połączona otrzymuje Player, która uderzyła z tokenem lub wejściem do regionu, i ten token lub regionu nazwę.

Podobnie, gdy gracz zbiera wszystkie tokeny lub wchodzi w wszystkie oznaczone regiony, wydarzenie wszystko zebrane aktywuje się i funkcja związana z funkcją 1> Class.Player1> jest wykonana tylko raz na gracza i może być u

Skrypt

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)

Niestandardowy interfejs

Ten moduł wyświetla kilka opcji do dostosowania swojej domyślnej interfejsu użytkownika, ale możesz zdecydować się na wyświetlenie elementów interfejsu użytkownika dostosowanego zamiast tego.

Gdy useCustomModals jest ustawiony na true w funkcji konfigurujClient, wydarzenie 1> showInfoModal1> wtedy się uruchomia, gdy gracz aktywuje token trackera. Podobnie wydarzenie 4> showCompleteModal4> wtedy się ur

Lokalny Skrypt

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Pokaż niestandardowy wiersz informacji
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Pokaż niestandardowy komplet mody
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

Widoczność GUI

Domyślnie polowanie na skarbownik ukrywa wszystkie ScreenGuis i CoreGuis (za wyjątkiem listy graczy) gdy pojawia się okienko informacji lub tryb zakończenia. Jeśli chcesz zmienić zachowanie automatycznego uk

Lokalny Skrypt

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- Utwórz interfejs użytkownika, który nie zostanie ukryty
local specialGuiInstance = Instance.new("ScreenGui")
-- Rozrysuj GUI ekranu nad GUI polowania na skarb
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Dodaj etykietę tekstową do interfejsu
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Remains visible when displaying modals"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Ukryj wszystkie interfejsy użytkownika zdefiniowane przez programistę
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 GUI związane z rdzeniem
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Pokaż wszystkie interfejsy użytkownika zdefiniowane przez programistę, które były ukryte
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Pokaż specjalne interfejsy użytkownika głównego, które zostały ukryte
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

Referencja API

Funkcje

skonfigurujClient

konfiguruj klienta(config: table )

Przywraca domyślne opcje konfiguracji strony klienta poprzez następujące klucze/werte w tabeli config. Ta funkcja może być wywołana tylko z LocalScript .

KluczOpisDomyślny
autoDismissTimeCzas w sekundach, zanim automatycznie modyfikator siebie zrzuci lub nawiguje do następnej strony, jeśli jest taka. Ustaw na 0, aby wyłączać, przestawać.20
closeModalGamepadPrzycisk Gamepad używany do zamknięcia modals ( Enum.KeyCode ).ButtonA
closeModalKeyboardKluczowy klawisz używany do zamknięcia modals ( Enum.KeyCode ).E
completeModalTextTekst do pokazania na modalu, który pojawia się po kliknięciu śledarki tokenów, gdy polowanie na skarb jest zakończone.„Dziękujemy za udział!”
infoModalTextTekst do pokazania na modalu, który pojawia się po kliknięciu śledownika tokenów.„Znajdź wszystkie tokeny, aby ukończyć polowanie”
tokenRotationSpeedPrędkość, w której kręcą się tokeny, w stopniach na sekundę. Ustaw na 0, aby zapobiec rotacji.20
nextArrowImageObraz używany do wskazania, że jest więcej stron modylu do pokazania po bieżącej stronie modylu.„rbxassetid://8167172095”
openTokenTrackerGamepadPrzycisk Gamepad używany do pokazania modals, które pojawiają się po aktywacji token trackera ( Enum.KeyCode ).ButtonY
openTokenTrackerKeyboardKluczowy klawisz używany do pokazywania modals, które pojawiają się po aktywacji token trackera ( Enum.KeyCode ).Y
openTokenTrackerGamepadButtonImageObraz dla przycisku na pasku gry, który służy do aktywowania śledzenia tokenów.„rbxassetid://8025860488”
regionIconIkona do wyświetlenia obok trackera tokenów przy wejściu do regionów.„rbxassetid://8073794624”
tokenIconIkona do wyświetlenia obok trackera tokenów podczas zbierania tokenów.„rbxassetid://8073794477”
tokenTrackerPositionSmallDevicePozycja interfejsu śledzenia tokenów na małych urządzeniach, takich jak telefony ( UDim2 ).(1, 0, 0, 84)
tokenTrackerPositionLargeDevicePozycja interfejsu śledzenia tokenów na większych urządzeniach, takich jak tablety i komputery ( UDim2 ).(1, 0, 1, -16)
useRegionsZamiast tokenów użyj regionów.fałszywy
Lokalny Skrypt

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.configureClient({
infoModalText = "Welcome to my Scavenger Hunt!",
completeModalText = "Thanks for playing my Scavenger Hunt!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

Konfiguruj Server

konfigurujServer(config: table )

Przywraca domyślne opcje konfiguracji serwerowej poprzez następujące klucze/werte w tabeli config. Ta funkcja może być wywołana tylko z Script .

KluczOpisDomyślny
tokenTagTag używany przez CollectionService do znalezienia wszystkich tokenów lub obszarów używanych w polowaniu na skarb.„ScavengerHuntPart”
datastoreNameNazwa DataStore używana do przechowywania postępu każdej kolekcji gracza.„ScavengerHuntTokens”
resetOnPlayerRemovingJeśli tak, zresetuje postępy użytkownika, gdy opuści on doświadczenie; wygodne, aby nie zapisać postępu podczas testowania polowania na skarb.fałszywy
Skrypt

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

wyłączać, przestawać

wyłączać, przestawać()

Ukrywa wszystkie interfejsy dla polowania na skarb, odłącza wszystkie słuchacze wszystkich wydarzeń, i zapobiega graczom zbieraniu tokenów lub interakcji z regionami. Ta funkcja może być wywołana tylko z Script.

Skrypt

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

włączać, rozpoczynać

włączać, rozpoczynać()

Pokazuje wszystkie interfejsy dla polowania na skarb, łączy wszystkie odbiory wydarzeń i umożliwia graczom zbieranie tokenów i interakcję z regionami. Ta funkcja może być wywołana tylko z Script.

Skrypt

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

Wydarzenia

zebrane

Występuje, gdy gracz staje się kolidować z tokenem lub wchodzi do regionu. Połączona funkcja otrzyma Player, która kolidowała z tokenem lub weszła do regionu i imię tokenu, które zostało kolidowane. Ten wątek może być połączony tylko w Script.

Parametry
gracz: PlayerUżytkownik, który uderzył w token lub wszedł do regionu.
itemName: stringNazwa tokenu, który został zderzony lub region, który został wprowadzony.
TotalCollected: numberCałkowita liczba zebranych przez użytkownika Tokenów reprezentowana przez player .
Skrypt

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)

wszystkieZbierane

Występuje, gdy gracz zbiera wszystkie tokeny lub wchodzi w wszystkie obszary w polowaniu za skarbem. Połączona funkcja otrzyma Player, która zbiera wszystkie tokeny, i jest ona uruchomiana tylko raz na gracza. Ten wydarzenie może być połączony tylko w Script.

Parametry
gracz: PlayerGracz, który zebrał wszystkie tokeny lub wejściu wszystkie regiony.
Skrypt

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)

pokażInfoModal

Występuje, gdy gracz klika na śledźnik tokenów, gdy opcja useCustomModalskonfiguracja jest ustawiona na prawdę. Ten wątek może być połączony tylko w LocalScript .

Lokalny Skrypt

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)

pokaż pełny moduł

Występuje, gdy gracz klika na śledarkę tokenów, gdy opcja useCustomModalskonfiguracja jest ustawiona na true i gracz zebrał wszystkie tokeny w polowaniu za skarb. Ten wydarzenie może być połączony tylko w 2>Class.LocalScript2>.

Lokalny Skrypt

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)

Wezwania

ukryjInnyGuis

hideOtherGuis( callback: function )

Ten zwrotny call zostanie natychmiastowo wykonany przed wyświetleniem modalu, pozwalając ci wyłączyć całe ScreenGuis lub elementy w nich przed wyświetleniem modalu. Patrz Widoczność GUI dla szczegółów i kodu przykładowego.

pokażInnyGuis

pokażInnyGuis( callback: function )

Ten zwrotny callback zostanie natychmiastowo uruchomiony po zakończeniu modalu, umożliwiając włączenie całego ScreenGuis lub elementów w nim. Patrz Widoczność GUI dla szczegółów i przykładu kodu.