Die Schatzsuche Entwicklermodul gibt Spielern eine intrinsisch spielerische Möglichkeit, Ihre Erfahrung zu erkunden und sie organisch mit dem gesamten Ort vertraut zu machen. Der Fortschritt der Spieler ist persistent, sodass Schatzsuchen über verschiedene Sitzungen hinweg fortgesetzt werden können.
Modulanwendung
Installation
Um das Modul Schatzsuche in einer Erfahrung zu verwenden:
Öffnen Sie das Toolbox über das Menü Fenster von Studio oder die Symbolleiste im Tab Start und wählen Sie den Tab Creator Store.

Stellen Sie sicher, dass die Sortierung auf Modelle eingestellt ist, und klicken Sie dann auf die Schaltfläche Alle anzeigen für die Kategorien.

Suchen und klicken Sie auf das Fliesenfeld Pakete.
Suchen Sie das Modul Schatzsuche und klicken Sie darauf oder ziehen Sie es in die 3D-Ansicht.

Verschieben Sie das gesamte Modell Schatzsuche in das ReplicatedStorage, im Fenster Explorer. Nachdem Sie die Erfahrung ausgeführt haben, beginnt das Modul mit dem Ausführen.
Verwendung von Tokens
Das Modul Schatzsuche verwendet Tokens als die Elemente, nach denen Spieler suchen und die sie sammeln. Das Modul wird mit einem Tokenmodell geliefert, das Sie in der 3D-Welt positionieren können.
Suchen Sie das Token1 Mesh im Workspace-Ordner des Hauptordners des Moduls.

Verschieben Sie Token1 in die Hierarchie des obersten Workspace und positionieren Sie es an der gewünschten Stelle.
Geben Sie dem Token einen einzigartigen Namen; dieser Name ist die Möglichkeit, wie das Modul verfolgt, welche Tokens jeder Spieler gesammelt hat.
Um weitere Tokens hinzuzufügen, duplizieren Sie ein vorhandenes Token und geben Sie ihm einen einzigartigen Namen.
Wenn Sie die im Bundle enthaltenen Mesh-Tokens nicht verwenden möchten, funktioniert jedes Model oder BasePart, solange es die folgenden Kriterien erfüllt:
Das Objekt hat ein CollectionService-Tag von ScavengerHuntPart. Falls gewünscht, kann der Tagname des CollectionService, den das Modul verwendet, geändert werden, indem ein anderer Wert für tokenTag in einem configureServer-Aufruf festgelegt wird.
Das Objekt enthält eine untergeordnete StringValue-Instanz, die auf den "Geschmack Text" eingestellt ist, der angezeigt wird, wenn das Token gesammelt wird.

Modell 
MeshPart
Verwendung von Regionen
Regionen unterscheiden sich geringfügig von Tokens, da sie große Bereiche sind, die als "gesammelt" markiert werden, sobald der Spieler sie betritt. Zusätzlich wird, wenn ein Spieler die Region verlässt, das Textmodal automatisch geschlossen und die Region selbst wird aus dem Workspace entfernt.
Erstellen Sie ein fixiertes Teil um die Region, wie einen Block oder eine Kugel. Das Modul deaktiviert automatisch die CanCollide-Eigenschaft zur Laufzeit, sodass Spieler nicht physisch mit der Region kollidieren.
Geben Sie ihm einen einzigartigen Namen. Dieser Name ist die Möglichkeit, wie das Modul verfolgt, welche Regionen jeder Spieler betreten hat.
Verwenden Sie den Abschnitt Tags der Eigenschaften des Teils, um das Tag ScavengerHuntPart auf das Teil anzuwenden, damit CollectionService es erkennt. Wenn gewünscht, kann der Tagname, den das Modul verwendet, geändert werden, indem ein anderer Wert für tokenTag in einem configureServer-Aufruf festgelegt wird.
Fügen Sie eine untergeordnete StringValue-Instanz hinzu, die auf den "Geschmack Text" eingestellt ist, der angezeigt wird, wenn die Region betreten wird.

Konfiguration
Das Modul ist vorkonfiguriert, um für die meisten Anwendungsfälle zu funktionieren, kann jedoch leicht angepasst werden. Beispielsweise, um die Rotationsgeschwindigkeit der Tokens zu ändern und die Informationen im Modal anzupassen:
Erstellen Sie in StarterPlayerScripts ein neues LocalScript und benennen Sie es in ConfigureScavengerHunt um.
Fügen Sie den folgenden Code in das neue Skript ein.
LocalScript - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "Willkommen zu meiner Schatzsuche!",completeModalText = "Danke, dass Sie an meiner Schatzsuche teilgenommen haben!",tokenRotationSpeed = 60,})
Ereignisse des Sammelns
Jedes Mal, wenn ein Spieler ein Token sammelt oder eine Region betritt, wird das collected-Ereignis ausgelöst. Sie können dieses Ereignis von einem serverseitigen Script abhören und entsprechend reagieren. Die verbundene Funktion erhält den Player, der mit dem Token kollidierte oder die Region betrat, sowie den Namen dieses Tokens oder der Region.
Ähnlich wird, wenn ein Spieler alle Tokens sammelt oder alle mit Tags versehenen Regionen betritt, das allCollected-Ereignis ausgelöst und die verbundene Funktion erhält den entsprechenden Player. Diese Funktion wird nur einmal pro Spieler ausgelöst und kann verwendet werden, um diesen Spieler mit einem Abzeichen, Zugang zu einem neuen Bereich, In-Erlebnis-Währung usw. zu belohnen.
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 .. " hat die Schatzsuche abgeschlossen!")
end)
Benutzerdefinierte GUI
Dieses Modul bietet mehrere Optionen zur Anpassung der standardmäßigen GUI, aber Sie können auch benutzerdefinierte GUI-Elemente anzeigen.
Wenn useCustomModals auf true im configureClient-Funktionsaufruf gesetzt ist, wird das showInfoModal-Ereignis jedes Mal ausgelöst, wenn der Spieler den Token-Tracker aktiviert. Ebenso wird das showCompleteModal-Ereignis ausgelöst, wenn der Spieler alles in der Schatzsuche gesammelt hat. Beide Ereignisse können in einem LocalScript abgehört werden.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- Zeige ein benutzerdefiniertes Info-Modal an
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Zeige ein benutzerdefiniertes Abschluss-Modal an
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Sichtbarkeit der GUI
Standardmäßig blendet die Schatzsuche alle ScreenGuis und CoreGuis (außer der Spielerliste) aus, wenn das Informations-Modal oder das Abschluss-Modal erscheint. Wenn Sie dieses automatische Ausblenden überschreiben und programmatisch entscheiden möchten, welche GUIs sichtbar bleiben sollen, fügen Sie die hideOtherGuis- und showOtherGuis-Rückrufe hinzu und reagieren Sie mit Ihrer eigenen benutzerdefinierten 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 = {}
-- Erstellen Sie ein Screen GUI, das nicht ausgeblendet wird
local specialGuiInstance = Instance.new("ScreenGui")
-- Zeichnen Sie die Screen GUI über der Schatzsuche GUI
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Fügen Sie ein Textlabel zur GUI hinzu
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Bleibt sichtbar, während Modale angezeigt werden"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Blende alle vom Entwickler definierten Screen GUIs aus
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
-- Blende spezifische Core GUIs aus
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Zeige alle vom Entwickler definierten Screen GUIs an, die ausgeblendet waren
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Zeige spezifische Core GUIs an, die ausgeblendet waren
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
API-Referenz
Funktionen
configureClient
configureClient(config: table)
Überschreibt die standardmäßigen clientseitigen Konfigurationsoptionen über die folgenden Schlüssel/Werte in der config-Tabelle. Diese Funktion kann nur von einem LocalScript aufgerufen werden.
| Schlüssel | Beschreibung | Standard |
|---|---|---|
| autoDismissTime | Zeit in Sekunden, bevor das Modal automatisch geschlossen wird oder zur nächsten Seite navigiert, wenn es eine gibt. Setzen Sie auf 0, um zu deaktivieren. | 20 |
| closeModalGamepad | Gamepad-Taste zum Schließen von Modalen (Enum.KeyCode). | ButtonA |
| closeModalKeyboard | Tastaturtaste zum Schließen von Modalen (Enum.KeyCode). | E |
| completeModalText | Text, der auf dem Modal angezeigt wird, das erscheint, nachdem Sie auf den Token-Tracker geklickt haben, wenn die Schatzsuche abgeschlossen ist. | "Danke für die Teilnahme!" |
| infoModalText | Text, der auf dem Modal angezeigt wird, das erscheint, nachdem Sie auf den Token-Tracker geklickt haben. | "Finden Sie alle Tokens, um die Schatzsuche abzuschließen" |
| tokenRotationSpeed | Geschwindigkeit, mit der die Tokens rotieren, in Grad pro Sekunde. Setzen Sie auf 0, um die Drehung zu verhindern. | 20 |
| nextArrowImage | Bild, das verwendet wird, um anzuzeigen, dass es weitere Modalseiten nach der aktuellen Modalseite gibt. | "rbxassetid://8167172095" |
| openTokenTrackerGamepad | Gamepad-Taste zum Anzeigen der Modale, die erscheinen, nachdem der Token-Tracker aktiviert wurde (Enum.KeyCode). | ButtonY |
| openTokenTrackerKeyboard | Tastaturtaste zum Anzeigen der Modale, die erscheinen, nachdem der Token-Tracker aktiviert wurde (Enum.KeyCode). | Y |
| openTokenTrackerGamepadButtonImage | Bild für die Gamepad-Taste, die verwendet wird, um den Token-Tracker zu aktivieren. | "rbxassetid://8025860488" |
| regionIcon | Symbol, das neben dem Token-Tracker angezeigt wird, wenn Sie Regionen betreten. | "rbxassetid://8073794624" |
| tokenIcon | Symbol, das neben dem Token-Tracker angezeigt wird, wenn Tokens gesammelt werden. | "rbxassetid://8073794477" |
| tokenTrackerPositionSmallDevice | Position der Token-Tracker-Oberfläche auf kleinen Geräten wie Handys (UDim2). | (1, 0, 0, 84) |
| tokenTrackerPositionLargeDevice | Position der Token-Tracker-Oberfläche auf größeren Geräten wie Tablets und PCs (UDim2). | (1, 0, 1, -16) |
| useRegions | Verwenden Sie Regionen anstelle von Tokens. | false |
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "Willkommen zu meiner Schatzsuche!",completeModalText = "Danke, dass Sie an meiner Schatzsuche teilgenommen haben!",tokenRotationSpeed = 60,navigationBeam = {lightEmission = 1},modal = {textSize = 14},})
configureServer
configureServer(config: table)
Überschreibt die standardmäßigen serverseitigen Konfigurationsoptionen über die folgenden Schlüssel/Werte in der config-Tabelle. Diese Funktion kann nur von einem Script aufgerufen werden.
| Schlüssel | Beschreibung | Standard |
|---|---|---|
| tokenTag | Tag, das von CollectionService verwendet wird, um alle Tokens oder Regionen zu finden, die in der Schatzsuche verwendet werden. | "ScavengerHuntPart" |
| datastoreName | Name des DataStore, der von der Schatzsuche verwendet wird, um den Fortschritt jeder Sammlung des Spielers zu speichern. | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | Wenn wahr, wird der Fortschritt des Nutzers zurückgesetzt, wenn er die Erfahrung verlässt; praktisch, um den Fortschritt während des Testens der Schatzsuche nicht zu speichern. | false |
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disable
disable()
Blendet alle UI für die Schatzsuche aus, trennt alle Eingabeereignis-Listener und verhindert, dass Spieler Tokens sammeln oder mit Regionen interagieren. Diese Funktion kann nur von einem Script aufgerufen werden.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.disable()
enable
enable()
Zeigt alle UI für die Schatzsuche an, verbindet alle Eingabeereignis-Listener und ermöglicht es Spielern, Tokens zu sammeln und mit Regionen zu interagieren. Diese Funktion kann nur von einem Script aufgerufen werden.
Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.enable()
Ereignisse
collected
Wird ausgelöst, wenn ein Spieler mit einem Token kollidiert oder eine Region betritt. Die verbundene Funktion erhält den Player, der mit dem Token kollidiert ist oder die Region betreten hat, sowie den Namen des Tokens, mit dem kollidiert wurde oder der Region, die betreten wurde. Dieses Ereignis kann nur in einem Script verbunden werden.
| Parameter | |
|---|---|
| player: Player | Benutzer, der mit einem Token kollidiert oder eine Region betreten hat. |
| itemName: string | Name des Tokens, mit dem kollidiert wurde, oder der Region, die betreten wurde. |
| totalCollected: number | Gesamtzahl der Tokens, die von dem Benutzer gesammelt wurden, der durch player repräsentiert wird. |
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
Wird ausgelöst, wenn ein Spieler alle Tokens sammelt oder alle Regionen in der Schatzsuche betritt. Die verbundene Funktion erhält den Player, der alle Tokens gesammelt hat, und es wird nur einmal pro Spieler ausgelöst. Dieses Ereignis kann nur in einem Script verbunden werden.
| Parameter | |
|---|---|
| player: Player | Spieler, der alle Tokens gesammelt oder alle Regionen betreten hat. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " hat die Schatzsuche abgeschlossen!")
end)
showInfoModal
Wird ausgelöst, wenn der Spieler auf den Token-Tracker klickt, wenn die Konfiguration useCustomModals auf wahr gesetzt ist. Dieses Ereignis kann nur in einem LocalScript verbunden werden.
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
Wird ausgelöst, wenn der Spieler auf den Token-Tracker klickt, wenn die Konfiguration useCustomModals auf wahr gesetzt ist und der Spieler alle Tokens in der Schatzsuche gesammelt hat. Dieses Ereignis kann nur in einem LocalScript verbunden werden.
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)
Rückrufe
hideOtherGuis
hideOtherGuis(callback: function)
Dieser Rückruf wird sofort vor der Anzeige eines Modals ausgeführt, sodass Sie gesamte ScreenGuis oder Elemente darin deaktivieren können, bevor das Modal angezeigt wird. Siehe GUI-Sichtbarkeit für Details und Beispielcode.
showOtherGuis
showOtherGuis(callback: function)
Dieser Rückruf wird sofort nach dem Ausblenden eines Modals ausgeführt, sodass Sie gesamte ScreenGuis oder Elemente darin aktivieren können. Siehe GUI-Sichtbarkeit für Details und Beispielcode.