Das ScavengerHunt Entwicklermodul gibt den Spielern einen inhärent gamifizierten Weg, deine Erlebniszu erkunden, und führt sie organisch in den gesamten Ort ein.Der Spielerfortschritt ist dauerhaft, so dass Sammeljagden über Sitzungen hinweg fortgesetzt werden können.
Modul-Verwendung
Installationen
Um das ScavengerHunt -Modul in einem Erlebnis zu verwenden:
Stellen Sie sicher, dass die Sortierung der Modelle ausgewählt ist, dann klicken Sie auf die Schaltfläche Alle sehen für Kategorien .
Suchen und klicken Sie auf die Entwickler-Module -Kachel.
Suchen Sie das Beutejagd-Modul und klicken Sie darauf oder ziehen Sie es in die 3D-Ansicht.
In dem Explorer Fenster, verschiebe das gesamte ScavengerHunt Modell in ServerScriptService .Wenn das Erlebnis ausgeführt wird, verteilt sich das Modul auf verschiedene Dienste und beginnt zu laufen.
Verwende Token
Das Schnitzeljagd-Modul verwendet Token als Gegenstände, die Spieler suchen und sammeln.Das Modul kommt mit einem Token-Modell, das du in der 3D-Welt positionieren kannst.
Lokalisieren Sie das Token1 -Mesh innerhalb des Arbeitsbereichs -Ordners des Hauptordners des Moduls.
Bewegen Sie Token1 in die oberste Ebene der Arbeitsplatz- Hierarchie und positionieren Sie es dort, wo gewünscht.
Gib dem Token einen einzigartigen Namen ; dieser Name ist, wie das Modul verfolgt, welche Token jeder Spieler gesammelt hat.
Um mehr Token hinzuzufügen, dupliziere ein vorhandenes Token und gib ihm einen einzigartigen Namen.
Wenn du die gebündelten Mesh-Token nicht verwenden möchtest, wird jede Model oder BasePart funktionieren, solange sie die folgenden Kriterien erfüllt:
Das Objekt hat ein CollectionService -Tag von ScavengerHuntPart.Wenn gewünscht, kann der Name des CollectionService-Tags, den das Modul verwendet, durch Festlegung eines anderen Werts für tokenTag in einem configureServer-Aufruf geändert werden.
Das Objekt enthält eine Kind-StringValueInstanz, die auf den "Flavor-Text" eingestellt ist, um angezeigt zu werden, wenn das Token gesammelt wird.
Modell Netzteil
Verwende Regionen
Regionen unterscheiden sich leicht von Tokens, da große Bereiche, die als "gesammelt" markiert sind, sobald der Spieler sie betritt.Zusätzlich, wenn ein Spieler die Region verlässt, wird der Geschmackstext-Modal automatisch abgelehnt und die Region selbst wird aus dem Arbeitsbereich entfernt.
Erstelle ein verankertes Teil rund um die Region, wie einen Block oder eine Kugel.Das Modul deaktiviert automatisch die Eigenschaft CanCollide auf der Laufzeit, so dass Spieler nicht physisch mit der Region zusammenstoßen.
Gib ihm einen einzigartigen Namen . Dieser Name ist, wie das Modul verfolgt, welche Regionen jeder Spieler betreten hat.
Mit der Tags-Sektion der Eigenschaften des Teils oder dem Tag-Editor des Studios wird der Tag an das Teil angepasst, so dass es erkannt wird.Wenn gewünscht, kann der Namens标签, den das Modul verwendet, durch Festlegung eines anderen Werts für tokenTag in einem configureServer Anruf geändert werden.
Füge eine Kind-StringValue-Instanz zum "Geschmackstext" hinzu, die angezeigt wird, wenn die Region eingegeben wird.
Konfigurieren
Das Modul ist vordefiniert, um für die meisten Anwendungsfälle zu arbeiten, aber es kann leicht angepasst werden.Zum Beispiel, um die Token-Rotationsgeschwindigkeit zu ändern und die modale Nachrichtanzupassen:
In StarterPlayerScripts erstelle ein neues LocalScript und benenne es in Konfigurieren von Schnitzeljagden um.
Füge den folgenden Code in das neue Skript, das. PL: die Skriptsein.
Lokales Skript - ConfigureScavengerHuntlocal 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,})
Sammlungsereignisse
Jedes Mal, wenn ein Spieler ein Token sammelt oder eine Region betritt, wird das gesammelte Ereignis ausgelöst.Du kannst diesem Ereignis von einer serverseitigen Script antworten und entsprechend reagieren.Die verbundene Funktion erhält die Player, die mit dem Token kollidierte oder die Region betrat und den Namen des Tokens oder der Region.
Ebenso, wenn ein Spieler alle Token sammelt oder alle markierten Regionen betritt, wird das Ereignis allCollected ausgelöst und die verbundene Funktion erhält die assoziierte 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-Experience-Währung usw. zu belohnen.
Skript
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)
grafische Benutzeroberflächeanpassen
Dieses Modul bietet mehrere Optionen zur Anpassung seiner grafische Benutzeroberfläche, aber Sie können stattdessen benutzerdefinierte GUI-Elemente anzeigen.
Wenn useCustomModals in der Funktion true auf gesetzt wird, wird das Ereignis showInfoModal jedes Mal ausgelöst, wenn der Spieler den Token-Tracker aktiviert.Ebenso wird das Ereignis showCompleteModal ausgelöst, wenn der Spieler alles in der Schnitzeljagd gesammelt hat.Beide dieser Ereignisse können in einem LocalScript gehört werden.
Lokales Skript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Zeige ein benutzerdefiniertes Infofenster
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Zeige ein benutzerdefiniertes vollständiges Modal
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
GUI-Sichtbarkeit
Standardmäßig versteckt die Schnitzeljagd alle ScreenGuis und CoreGuis (außer der Spielerliste) wenn die Informations- oder Abschlussmodale erscheinen.Wenn du dieses automatische Versteckungsverhalten überschreiben und programmatisch entscheiden möchtest, welche GUIs sichtbar bleiben sollen, füge die hideOtherGuis und showOtherGuis Rückrufe hinzu und antworte mit deiner eigenen benutzerdefinierten Logik.
Lokales Skript
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 = {}
-- Erstellen einer Bildschirm-GUI, die nicht versteckt wird
local specialGuiInstance = Instance.new("ScreenGui")
-- Ziehe die Bildschirm-GUI über der grafische Benutzeroberfläche
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Text-Label zur grafische Benutzeroberflächehinzufügen
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()
-- Alle von der Entwickler definierten Bildschirm-GUIs ausblenden
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
-- Bestimmte Kern-GUIs verbergen
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Zeige alle entwicklerdefinierten Bildschirm-GUIs, die versteckt wurden
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Zeige spezifische Kern-GUIs, die versteckt wurden
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
API-Referenz
Funktionen
client konfigieren
client konfigurieren(config: table )
Übernimmt Standard-Client-Seiten-Konfigurationsoptionen durch die folgenden Schlüssel-/Werte in der config Tabelle.Diese Funktion kann nur von einem LocalScript aufgerufen werden.
Schlave | Beschreibung | Standardmäßig |
---|---|---|
autoDismissTime | Zeit in Sekunden, bevor sich das Modal automatisch ablehnt oder zur nächsten Seite navigiert, wenn es eine gibt. Auf 0 festlegen, um es zu deaktivieren. | 20 |
closeModalGamepad | Gamepad-Taste wird verwendet, um Modale zu schließen (Enum.KeyCode). | ButtonA |
closeModalKeyboard | Tastaturtaste, mit der Modale geschlossen werden ( Enum.KeyCode ). | E |
completeModalText | Text, der auf dem Modal angezeigt wird, das nach dem Klicken auf den Token-Tracker erscheint, wenn die Schnitzeljagd abgeschlossen ist. | „Danke für die Teilnahme!“ |
infoModalText | Text, der auf dem Modal angezeigt wird, das nach dem Klicken auf den Token-Tracker erscheint. | Finde alle Token, um die Jagd abzuschließen |
tokenRotationSpeed | Geschwindigkeit, mit der sich die Token drehen, in Grad pro Sekunde. Auf 0 festlegen, um die Rotation zu verhindern. | 20 |
nextArrowImage | Bild verwendet, um anzuzeigen, dass es mehr Modal-Seiten gibt, die nach der aktuellen Modal-Seite angezeigt werden müssen. | „rbxassetid://8167172095“ |
openTokenTrackerGamepad | Gamepad-Taste verwendet, um die Modale anzuzeigen, die nach der Aktivierung des Token-Tracker-Tools ( Enum.KeyCode ) erscheinen. | ButtonY |
openTokenTrackerKeyboard | Tastaturtaste, mit der die nach der Aktivierung des Token-Trackers erscheinenden Modale angezeigt werden ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Bild für die Gamepad-Taste, die verwendet wird, um den Token-Tracker zu aktivieren. | „rbxassetid://8025860488“ |
regionIcon | Symbol wird neben dem Token-Tracker angezeigt, wenn Regionen betreten werden. | „rbxassetid://8073794624“ |
tokenIcon | Symbol, das neben dem Token-Tracker angezeigt wird, wenn Tokens gesammelt werden. | „rbxassetid://8073794477“ |
tokenTrackerPositionSmallDevice | Position der Token-Tracker-Benutzeroberfläche auf kleinen Geräten wie Telefonen ( UDim2 ). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Position der Token-Tracker-Benutzeroberfläche auf größeren Geräten wie Tablets und PC ( UDim2 ). | (1, 0, 1, -16) |
useRegions | Anstatt Token verwende Regionen. | falsch |
Lokales Skript
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},})
Server konfigurieren
konfigurierenServer(config: table)
Übernimmt Standard-Server-seitige Konfigurationsoptionen durch die folgenden Schlüssel-/Werte in der config Tabelle.Diese Funktion kann nur von einem Script aufgerufen werden.
Schlave | Beschreibung | Standardmäßig |
---|---|---|
tokenTag | Tag, den CollectionService verwendet, um alle Token oder Regionen zu finden, die bei der Schnitzeljagd verwendet wurden. | „ScavengerHuntPart“ |
datastoreName | Name der DataStore verwendet, die vom Schatzsuchen verwendet wird, um den Sammelfortschritt jedes Spieler:inzu speichern. | „ScavengerHuntTokens“ |
resetOnPlayerRemoving | Wenn es wahr ist, setzt es den Fortschritt des Benutzers zurück, wenn er die Erlebnisverlässt; praktisch, um den Fortschritt nicht zu speichern, während du die Schnitzeljagd testest. | falsch |
Skript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
deaktivieren
deaktivieren()
Versteckt die gesamte Benutzeroberfläche für die Schnitzeljagd, trennt alle Eingabeereignis-Listen und verhindert, dass Spieler Token sammeln oder mit Regionen interagieren.Diese Funktion kann nur von einem Script aufgerufen werden.
Skript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
aktivieren
aktivieren()
Zeigt alle UI für die Schnitzeljagd, verbindet alle Eingabeereignis-Listen und ermöglicht es Spielern, Token zu sammeln und mit Regionen zu interagieren.Diese Funktion kann nur von einem Script aufgerufen werden.
Skript
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Ereignisse
gesammelt
Feuert, wenn ein Spieler mit einem Token kollidiert oder eine Region betritt.Die verbundene Funktion erhält die Player, die mit dem Token kollidierte oder die Region betrat und den Namen des Tokens, das kollidiert wurde, oder die Region, die eingegeben wurde.Dieses Ereignis kann nur in einem Script verbunden werden.
Parameter | |
---|---|
spieler:in: Player | Benutzer, der mit einem Token kollidierte oder eine Region betrat. |
itemName: string | Name des Tokens, das kollidiert wurde, oder der Region, die eingegeben wurde. |
totalCollected: number | Gesamtzahl der von dem Benutzer vertretenen Token, die von player gesammelt wurden. |
Skript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
allesGesammelt
Feuert, wenn ein Spieler alle Token sammelt oder alle Regionen im Schnitzeljagd betritt.Die verbundene Funktion wird die Player, die alle Token gesammelt hat, empfangen, und sie wird nur einmal pro Spieler:inabgefeuert.Dieses Ereignis kann nur in einem Script verbunden werden.
Parameter | |
---|---|
spieler:in: Player | Spieler, der alle Token gesammelt oder alle Regionen betreten hat. |
Skript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
zeigenInfoModal
Feuert, wenn der Spieler auf den Token-Tracker klickt, wenn die Option Konfiguration auf wahr gesetzt ist.Dieses Ereignis kann nur in einem LocalScript verbunden werden.
Lokales Skript
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)
zeigVollständigeModal
Feuert, wenn der Spieler auf den Token-Tracker klickt, wenn die Option Konfiguration auf Gesammelt gesetzt ist und der Spieler alle Token in der Schnitzeljagd gesammelt hat.Dieses Ereignis kann nur in einem LocalScript verbunden werden.
Lokales Skript
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)
Rückrufe
andere Guis ausblenden
hideOtherGuis(Callback: function )
Dieser Rückruf wird sofort ausgeführt, bevor ein Modal angezeigt wird, so dass du ganze ScreenGuis oder Elemente innerhalb des Modals deaktivieren kannst, bevor das Modal angezeigt wird.Siehe GUI-Sichtbarkeit für Details und Codes.
zeigenOtherGuis
zeigenOtherGuis(Callback: function)
Dieser Rückruf wird ausgeführt, sobald ein Modal zurückgewiesen wurde, so dass du gesamte ScreenGuis oder Elemente innerhalb von ihnen aktivieren kannst.Siehe GUI-Sichtbarkeit für Details und Codes.