Moduł ScavengerHunt dla programistów daje graczom naturalny sposób na odkrywanie swojego doświadczenia, wprowadzając ich organicznie do całego miejsce.Postęp gracza jest trwały, więc polowania na skarby mogą trwać pomiędzy sesjami.
Użycie modułu
Instalacja
Aby użyć modułu Polowanie na skarby w doświadczeniu:
Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .
Zlokalizuj i kliknij pasek modułów rozwojowych .
Zlokalizuj moduł Polowanie na Zbieraczy i kliknij go, lub przeciągnij i upuść do widoku 3D.
W oknie Eksploratora przenieś cały model Polowanie na Skarby do ServerScriptService .Po uruchomieniu doświadczenia moduł rozproszy się na różne usługi i rozpocznie działanie.
Użyj tokenów
Moduł polowania na skarby używa tokenów jako przedmiotów, które gracze szukają i zbierają.Moduł zawiera jeden model tokenów, który możesz umieścić w świecie 3D.
Zlokalizuj sieć Token1 wewnątrz katalogu Przestrzeń robocza głównego katalogu modułu.
Przenieś Token1 do hierarchii najwyższego poziomu Przestrzeni roboczej i umieść go tam, gdzie zechcesz.
Daj tokenowi unikalną nazwę , która jest sposobem śledzenia przez moduł, które tokeny zebrał każdy gracz.
Aby dodać więcej żetonów, powtórz istniejący żeton i nadaj mu unikalną nazwę.
Jeśli nie chcesz używać związanych tokenów siatki, każdy Model lub BasePart będzie działać, pod warunkiem, że spełnia następujące kryteria:
Obiekt ma tag Class.CollectionService``ScavengerHuntPart .Jeśli chcesz, nazwa tagu CollectionService, którą wykorzystuje moduł, może zostać zmieniona poprzez ustawienie innej wartości dla tokenTag w wezwaniu konfiguruj serwer.
Obiekt zawiera dziecko StringValue, ustawioną na "tekst smaku", który wyświetlany jest, gdy token jest zbierany.
Model Część siatki
Użyj regionów
Regiony różnią się nieco od tokenów, ponieważ duże obszary oznaczone jako "zebrane", gdy gracz je wchodzi.Ponadto, gdy gracz opuści region, tekst smaku automatycznie zostanie odrzucony, a sam region zostanie usunięty z przestrzeni roboczej.
Stwórz osadzoną część wokół regionu, taką jak blok lub sfera.Moduł automatycznie wyłączy właściwość CanCollide na czasie wykonania, tak że gracze nie będą fizycznie zderzać się z regionem.
Nadaj mu unikalną nazwę . Ta nazwa jest sposobem, w jaki moduł śledzi regiony, do których wszedł każdy gracz.
Używając sekcji Tagi właściwości części lub edytora tagów w Studio, zastosuj tag do części, aby wykryła go.Jeśli tego zapragniesz, nazwa tagu, którego używa moduł, może zostać zmieniona poprzez ustawienie innej wartości dla tokenTag w wezwaniu konfiguruj serwer.
Załóż dziecko StringValue instancję ustawioną na "tekst smaku" do wyświetlenia, gdy region zostanie wprowadzony.
Konfiguracja
Moduł jest wstępnie skonfigurowany do pracy 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 dostosować wiadomość informacyjną modalną:
W StarterPlayerScripts , utwórz nowy LocalScript i zmień nazwę na Konfiguruj polowanie na skarby .
Wklej następujący kod do nowego skryptu.
LocalScript - Konfiguruj polowanie na skarbylocal 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, uruchamia się wydarzenie zebrane.Możesz słuchać tego wydarzenia ze strony serwera Script i odpowiedzieć odpowiednio.Połączona funkcja otrzymuje Player, która zderzyła się z tokenem lub weszła do regionu, a nazwa tego tokenu lub regionu.
Podobnie, gdy gracz zbiera wszystkie żetony lub wchodzi do wszystkich oznaczonych regionów, wydarzenie wszystko zebrane uruchamia się i połączona funkcja otrzymuje powiązany >.Funkcja ta jest uruchamiana tylko raz na gracza i można ją używać do nagradzania tego gracza odznaką , dostępem do nowego obszaru, walutą w doświadczeniu itp.
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 dostosowania domyślnego interfejsu GUI, ale możesz zdecydować się wyświetlać zamiast tego niestandardowe elementy interfejsu GUI.
Kiedy useCustomModals jest ustawione na true w funkcji konfiguruj klienta, wydarzenie pokaż informacje modal występuje za każdym razem, gdy gracz aktywuje śledzik tokenów.Podobnie wydarzenie showCompleteModal występuje, gdy gracz zebrał wszystko w polowaniu na skarby.Oba te wydarzenia można wysłuchać w LocalScript .
Lokalny skrypt
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Pokaż niestandardowe okno informacji
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Pokaż niestandardowe pełne okno
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Widzialność interfejsu GUI
Domyślnie polowanie na skarby ukrywa wszystkie ScreenGuis i CoreGuis (z wyjątkiem listy graczy) gdy pojawia się moduł informacji lub moduł ukończenia.Jeśli chcesz anulować to zachowanie automatycznego ukrywania i programowo zdecydować, które interfejsy użytkownika powinny pozostać widoczne, dodaj hideOtherGuis i showOtherGuis powroty i odpowiedz z własną niestandardową logiką.
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 = {}
-- Stwórz interfejs GUI ekranu, który nie zostanie ukryty
local specialGuiInstance = Instance.new("ScreenGui")
-- Narysuj interfejs GUI na ekranie powyżej interfejsu GUI polowania na skarby
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Dodaj etykietę tekstową do interfejsu GUI
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 ekranowe określone 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 konkretne podstawowe interfejsy GUI
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Pokaż wszystkie interfejsy użytkownika ekranu zdefiniowane przez programistę, które zostały ukryte
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Pokaż konkretne podstawowe interfejsy, które były ukryte
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Referencja API
Funkcje
skonfiguruj klienta
skonfiguruj klienta(config: table )
Nadpisanie domyślnych opcji konfiguracji po stronie klienta za pomocą następujących kluczy/wartości w tabeli config.Funkcja ta może być wywołana tylko z LocalScript.
Klucz | Opis | Domyślny |
---|---|---|
autoDismissTime | Czas w sekundach, zanim modal automatycznie odrzuci się lub przejdzie na następną stronę, jeśli istnieje. Ustaw na 0, aby wyłączać, przestawać. | 20 |
closeModalGamepad | Przycisk gamepada używany do zamykania modali (Enum.KeyCode). | ButtonA |
closeModalKeyboard | Klawisz klawiatury używany do zamykania modali (Enum.KeyCode). | E |
completeModalText | Tekst do wyświetlenia w modalu, który pojawia się po kliknięciu śledzika tokenów, gdy polowanie na skarby zakończy się. | „Dziękuję za udział!” |
infoModalText | Tekst do wyświetlenia w modalu, który pojawia się po kliknięciu śledzika tokenów. | „Znajdź wszystkie tokeny, aby ukończyć polowanie” |
tokenRotationSpeed | Prędkość, z jaką obraca się tokeny, w stopniach na sekundę. Ustaw na 0, aby zapobiec obrotowi. | 20 |
nextArrowImage | Obraz używany do wskazania, że istnieje więcej stron modalnych do pokazania po obecnej stronie modalowej. | „rbxassetid://8167172095” |
openTokenTrackerGamepad | Przycisk gamepada używany do wyświetlania modalów, które pojawiają się po aktywacji śledzenia tokenów ( Enum.KeyCode ). | ButtonY |
openTokenTrackerKeyboard | Klawisz klawiatury używany do wyświetlania modali, które pojawiają się po aktywacji śledzenia tokenów ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Obraz dla przycisku gamepada, który jest używany do aktywacji śledzenia tokenów. | „rbxassetid://8025860488” |
regionIcon | Ikona do wyświetlenia obok śledzika tokenów przy wchodzeniu do regionów. | „rbxassetid://8073794624” |
tokenIcon | Ikona do wyświetlenia obok śledzika 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łsz |
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},})
skonfiguruj serwer
konfiguruj serwer(config: table )
Nadpisanie domyślnych opcji konfiguracji po stronie serwera za pomocą następujących kluczy/wartości w tabeli config.Funkcja ta może być wywołana tylko z Script.
Klucz | Opis | Domyślny |
---|---|---|
tokenTag | Tag używany przez CollectionService do znalezienia wszystkich tokenów lub regionów używanych w polowaniu na skarby. | „ScavengerHuntPart” |
datastoreName | Nazwa DataStore używana przez polowanie na skarby do przechowywania postępu kolekcji każdego gracza. | „ScavengerHuntTokens” |
resetOnPlayerRemoving | Jeśli prawda, resetuje postępy użytkownika, gdy opuszcza on doświadczenie; wygodne dla nieprzechowywania postępu podczas testowania polowania na skarby. | fałsz |
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
wyłączać, przestawać
wyłączać, przestawać()
Ukrywa całą UI dla polowania na skarby, odłącza wszystkie słuchacze wydarzeń wejściowych i zapobiega gromadzeniu przez graczy żetonów lub interakcji z regionami.Funkcja ta 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 całą UI dla polowania na skarby, łączy wszystkie słuchacze wydarzeń wejściowych i pozwala graczom zbierać tokeny i interakować z regionami.Funkcja ta może być wywołana tylko z Script.
Skrypt
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Wydarzenia
zbierane
Wypala się, gdy gracz zderza się z tokenem lub wchodzi do regionu.Połączona funkcja otrzyma Player, która zderzyła się z tokenem lub weszła do regionu, a nazwa tokena, który został zderzony lub region, który został wpisany.To wydarzenie może być połączone tylko w Script .
Parametry | |
---|---|
gracz: Player | Użytkownik, który zderzył się z tokenem lub wszedł do regionu. |
itemName: string | Nazwa tokenu, który został zderzony lub region, który został wprowadzony. |
totalCollected: number | Całkowita liczba żetonów zebranych przez użytkownika reprezentowanego 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)
wszystkoZebrane
Wybucha, gdy gracz zbiera wszystkie żetony lub wchodzi we wszystkie regiony w polowaniu na skarby.Połączona funkcja otrzyma Player, która zebrała wszystkie tokeny, i jest uruchamiana tylko raz na gracza.To wydarzenie może być połączone tylko w Script .
Parametry | |
---|---|
gracz: Player | Gracz, który zebrał wszystkie tokeny lub wszedł do wszystkich regionów. |
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
Wystrzeliwuje, gdy gracz kliknie na tracker tokenów, gdy opcja konfiguracji jest ustawiona na prawdę.To wydarzenie może być połączone 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 modal
Wypala się, gdy gracz kliknie na tracker tokenów, gdy opcja konfiguracji jest ustawiona na i gracz zebrał wszystkie żetony w polowaniu na skarby.To wydarzenie może być połączone tylko w LocalScript .
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 powrotne
ukryjOtherGuis
hideOtherGuis( callback: function )
Ten powrót wezwania uruchamia się natychmiast przed wyświetleniem modal, pozwalając ci wyłączyć całe ScreenGuis lub elementy w nich przed wyświetleniem modal.Zobacz Widoczność interfejsu GUI dla szczegółów i kodu próbnego.
pokażOtherGuis
pokażOtherGuis( callback: function)
Ten powrót wezwania uruchamany jest natychmiast po odrzuceniu modal, umożliwiając włączenie całego ScreenGuis lub elementów w nich.Zobacz Widoczność interfejsu GUI dla szczegółów i kodu próbnego.