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:
Z zakładki Zobacz, otwórz Skrzynię narzędzi i wybierz Sklep z twórcami.
Upewnij się, że Modele sortowanie jest zaznaczone, a następnie kliknij przycisk Zobacz wszystko dla Kategorie.
Lokalizuj i klikaj na płytę Moduły Rozwoju .
Lokalizuj moduł Polowanie na Skarb i kliknij na nie lub przeciągnij go do 3D-wizualizacji.
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.
Lokalizuj Token1 siatkę w Workspace działce modułu głównego.
Przenieś Token1 do najwyższego poziomu Workspace i umieść go w dowolnym miejscu.
Daj tokenowi unikalne imię ; to imię jest sposobem, w jaki moduł śledzi każde zebrane przez gracza tokeni.
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.
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.
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.
Daj unikalne imię . To imię jest używane do śledzenia regionów, które każdy gracz wszedł.
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
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:
W StarterPlayerScripts utwórz nowy LocalScript i zmień go na ConfigureScavengerHunt .
Wklej następujący kod do nowego skryptu.
Lokalny Skrypt - Konfiguruj Polowanie na Skarblocal 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
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 .
Klucz | Opis | Domyślny |
---|---|---|
autoDismissTime | Czas 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 |
closeModalGamepad | Przycisk Gamepad używany do zamknięcia modals ( Enum.KeyCode ). | ButtonA |
closeModalKeyboard | Kluczowy klawisz używany do zamknięcia modals ( Enum.KeyCode ). | E |
completeModalText | Tekst 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ł!” |
infoModalText | Tekst do pokazania na modalu, który pojawia się po kliknięciu śledownika tokenów. | „Znajdź wszystkie tokeny, aby ukończyć polowanie” |
tokenRotationSpeed | Prędkość, w której kręcą się tokeny, w stopniach na sekundę. Ustaw na 0, aby zapobiec rotacji. | 20 |
nextArrowImage | Obraz używany do wskazania, że jest więcej stron modylu do pokazania po bieżącej stronie modylu. | „rbxassetid://8167172095” |
openTokenTrackerGamepad | Przycisk Gamepad używany do pokazania modals, które pojawiają się po aktywacji token trackera ( Enum.KeyCode ). | ButtonY |
openTokenTrackerKeyboard | Kluczowy klawisz używany do pokazywania modals, które pojawiają się po aktywacji token trackera ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Obraz dla przycisku na pasku gry, który służy do aktywowania śledzenia tokenów. | „rbxassetid://8025860488” |
regionIcon | Ikona do wyświetlenia obok trackera tokenów przy wejściu do regionów. | „rbxassetid://8073794624” |
tokenIcon | Ikona do wyświetlenia obok trackera tokenów podczas zbierania tokenów. | „rbxassetid://8073794477” |
tokenTrackerPositionSmallDevice | Pozycja interfejsu śledzenia tokenów na małych urządzeniach, takich jak telefony ( UDim2 ). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Pozycja interfejsu śledzenia tokenów na większych urządzeniach, takich jak tablety i komputery ( UDim2 ). | (1, 0, 1, -16) |
useRegions | Zamiast 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
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 .
Klucz | Opis | Domyślny |
---|---|---|
tokenTag | Tag używany przez CollectionService do znalezienia wszystkich tokenów lub obszarów używanych w polowaniu na skarb. | „ScavengerHuntPart” |
datastoreName | Nazwa DataStore używana do przechowywania postępu każdej kolekcji gracza. | „ScavengerHuntTokens” |
resetOnPlayerRemoving | Jeś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ć
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ć
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: Player | Użytkownik, który uderzył w token lub wszedł do regionu. |
itemName: string | Nazwa tokenu, który został zderzony lub region, który został wprowadzony. |
TotalCollected: number | Cał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: Player | Gracz, 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
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
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.