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 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:

  1. Z zakładki Widok, otwórz Pudełko z narzędziami i wybierz zakładkę Sklep z twórcami .

    Toolbox toggle button in Studio
  2. Upewnij się, że wybrano sortowanie modele , a następnie kliknij przycisk Zobacz wszystko dla kategorii .

  3. Zlokalizuj i kliknij pasek modułów rozwojowych .

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

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

  1. Zlokalizuj sieć Token1 wewnątrz katalogu Przestrzeń robocza głównego katalogu modułu.

  2. Przenieś Token1 do hierarchii najwyższego poziomu Przestrzeni roboczej i umieść go tam, gdzie zechcesz.

  3. Daj tokenowi unikalną nazwę , która jest sposobem śledzenia przez moduł, które tokeny zebrał każdy gracz.

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

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

  2. Nadaj mu unikalną nazwę . Ta nazwa jest sposobem, w jaki moduł śledzi regiony, do których wszedł każdy gracz.

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

  4. 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ą:

  1. W StarterPlayerScripts , utwórz nowy LocalScript i zmień nazwę na Konfiguruj polowanie na skarby .

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

    LocalScript - Konfiguruj polowanie na skarby

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

KluczOpisDomyślny
autoDismissTimeCzas w sekundach, zanim modal automatycznie odrzuci się lub przejdzie na następną stronę, jeśli istnieje. Ustaw na 0, aby wyłączać, przestawać.20
closeModalGamepadPrzycisk gamepada używany do zamykania modali (Enum.KeyCode).ButtonA
closeModalKeyboardKlawisz klawiatury używany do zamykania modali (Enum.KeyCode).E
completeModalTextTekst 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ł!”
infoModalTextTekst do wyświetlenia w modalu, który pojawia się po kliknięciu śledzika tokenów.„Znajdź wszystkie tokeny, aby ukończyć polowanie”
tokenRotationSpeedPrędkość, z jaką obraca się tokeny, w stopniach na sekundę. Ustaw na 0, aby zapobiec obrotowi.20
nextArrowImageObraz używany do wskazania, że istnieje więcej stron modalnych do pokazania po obecnej stronie modalowej.„rbxassetid://8167172095”
openTokenTrackerGamepadPrzycisk gamepada używany do wyświetlania modalów, które pojawiają się po aktywacji śledzenia tokenów ( Enum.KeyCode ).ButtonY
openTokenTrackerKeyboardKlawisz klawiatury używany do wyświetlania modali, które pojawiają się po aktywacji śledzenia tokenów ( Enum.KeyCode ).Y
openTokenTrackerGamepadButtonImageObraz dla przycisku gamepada, który jest używany do aktywacji śledzenia tokenów.„rbxassetid://8025860488”
regionIconIkona do wyświetlenia obok śledzika tokenów przy wchodzeniu do regionów.„rbxassetid://8073794624”
tokenIconIkona do wyświetlenia obok śledzika 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ł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.

KluczOpisDomyślny
tokenTagTag używany przez CollectionService do znalezienia wszystkich tokenów lub regionów używanych w polowaniu na skarby.„ScavengerHuntPart”
datastoreNameNazwa DataStore używana przez polowanie na skarby do przechowywania postępu kolekcji każdego gracza.„ScavengerHuntTokens”
resetOnPlayerRemovingJeś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: PlayerUżytkownik, który zderzył się z tokenem lub wszedł do regionu.
itemName: stringNazwa tokenu, który został zderzony lub region, który został wprowadzony.
totalCollected: numberCał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: PlayerGracz, 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.