Il modulo sviluppatore CacciaAlTesoro offre ai giocatori un modo intrinsecamente gamificato di esplorare la tua esperienza, introducendoli organicamente in tutto il luogo. Il progresso del giocatore è persistente, quindi le cacce al tesoro possono continuare tra le sessioni.
Utilizzo del modulo
Installazione
Per utilizzare il modulo CacciaAlTesoro in un'esperienza:
Dalla scheda Visualizza, aprire il Pannello degli strumenti e selezionare la scheda Marketplace.
Assicurarsi che la selezione dei modelli sia selezionata, quindi fare clic sul pulsante Vedi tutto per le Categorie.
Individuare e fare clic sulla piastrella DEV MODULES.
Individua il modulo Caccia al tesoro e fai clic su di esso, o trascinalo e rilascialo nella visualizzazione 3D.
Nella finestra Explorer, spostare l'intero modello CacciaAlTesoro in ServerScriptService. Dopo aver avviato l'esperienza, il modulo si distribuirà a vari servizi e inizierà a funzionare.
Utilizzo dei token
Il modulo caccia al tesoro utilizza i gettoni come gli oggetti che i giocatori cercano e raccolgono. Il modulo viene fornito con un modello di token che puoi posizionare nel mondo 3D.
Individua la rete Gettone1 all'interno della cartella Spazio di lavoro, nella cartella principale del modulo.
Sposta Gettone1 nella gerarchia dello spazio di lavoro di livello superiore e posizionalo dove desideri.
Dai al gettone un nome unico; questo nome è il modo in cui il modulo tiene traccia dei gettoni che ogni giocatore ha raccolto.
Per aggiungere più token, duplica un token esistente e assegnagli un nome unico.
Se non vuoi utilizzare i gettoni di mesh in pacchetto, qualsiasi Model o BasePart funzionerà, purché soddisfi i seguenti criteri:
- L'oggetto ha un CollectionService tag di ScavengerHuntPart. Se lo si desidera, il nome del tag utilizzato dal modulo può essere cambiato impostando un valore diverso per tokenTag in una chiamata configureServer.
- L'oggetto contiene un'StringValueistanza del figlio impostata sul "testo narrativo" da visualizzare quando il gettone viene raccolto.
Utilizzo delle regioni
Le regioni differiscono leggermente dai gettoni, poiché le grandi aree sono contrassegnate come "raccolte" una volta che il giocatore accede a esse. Inoltre, quando un giocatore lascia la regione, il modale di testo narrativo si chiude automaticamente e la regione stessa viene rimossa dallo spazio di lavoro.
Crea una parte ancorata intorno alla regione, come un blocco o una sfera. Il modulo disattiverà automaticamente la CanCollideproprietà in tempo di esecuzione in modo che i giocatori non si scontrino fisicamente con la regione.
Dagli un nome unico. Questo nome è il modo in cui il modulo tiene traccia delle regioni a cui ogni giocatore ha acceduto.
Assegna la parte un CollectionService tag di ScavengerHuntPart. Se lo si desidera, il nome del tag utilizzato dal modulo può essere cambiato impostando un valore diverso per tokenTag in una chiamata configureServer.
Includi un'StringValueistanza bambino impostata sul "testo narrativo" per visualizzare quando viene inserita la regione.
Configurazione
Il modulo è preconfigurato per funzionare nella maggior parte dei casi di utilizzo, ma può essere facilmente personalizzato. Ad esempio, per cambiare la velocità di rotazione del gettone e personalizzare il messaggio di informazioni modali:
In StarterPlayerScripts, crea un nuovo LocalScript e rinominalo in ConfiguraCacciaAlTesoro.
Incolla il seguente codice nel nuovo Script.
LocalScript - 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,})
Eventi di raccolta
Ogni volta che un giocatore raccoglie un gettone o entra in una regione, l'evento raccolto si accende. Puoi ascoltare questo evento da un lato server Script e rispondere di conseguenza. La funzione collegata riceve il Player che si è scontrato con il gettone o è entrato nella regione e il nome di quel gettone o regione.
Allo stesso modo, quando un giocatore raccoglie tutti i gettoni o entra in tutte le regioni contrassegnate, l'evento tuttiRaccolti si accende e la funzione collegata riceve l'associato Player. Questa funzione viene attivata solo una volta per giocatore e può essere utilizzata per premiare quel giocatore con un badge, l'accesso a una nuova area, la valuta nell'esperienza, ecc.
Script
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 .. " ha completato la caccia!")
fine)
Interfaccia grafica utente personalizzata
Questo modulo espone diverse opzioni per personalizzare la sua Interfaccia grafica utente predefinita, ma puoi scegliere di visualizzare dell'interfaccia personalizzati.
Quando useCustomModals è impostato su true nella funzione configureClient, l'evento showInfoModal si accende ogni volta che il giocatore attiva il tracker del gettone. Allo stesso modo, l'evento mostraModaleCompleto si accende quando il giocatore ha raccolto tutto nella caccia al tesoro. Entrambi questi eventi possono essere ascoltati in un LocalScript.
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Show a custom info modal
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Show a custom complete modal
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Visibilità Interfaccia grafica utente
Per impostazione predefinita, la caccia al tesoro nasconde tutti i ScreenGuis e i CoreGuis (tranne l'elenco del giocatore) quando appare il modale di informazioni o il modale di completamento. Se vuoi sovrascrivere questo comportamento di auto-hiding e decidere programmaticamente se le GUI debbano rimanere visibili, includi la nascondiAltreGui e i comandi di richiamo mostraAltreGui e rispondi con la tua logica personalizzata.
LocalScript
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 = {}
-- Create a screen GUI that will not be hidden
local specialGuiInstance = Instance.new("ScreenGui")
-- Draw the screen GUI above the scavenger hunt GUI
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Add text label to the 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()
-- Hide all developer-defined screen GUIs
local instances = playerGui:GetChildren()
for _, instance in pairs(instances) do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- Hide specific core GUIs
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Show all developer-defined screen GUIs that were hidden
for _, instance in pairs(hiddenInstances) do
instance.Enabled = true
end
hiddenInstances = {}
-- Show specific core GUIs that were hidden
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Riferimento API
Funzioni
configureClient
configureClient(config:table):nil
Sovrascrive la configurazione predefinita del client attraverso le seguenti chiavi/valori nella tabella config. Questa funzione può essere chiamata solo da un LocalScript.
Generale
Chiave | Descrizione | Predefinito |
---|---|---|
autoDismissTime | Tempo in secondi prima che il modale si rimuova automaticamente o navighi alla pagina successiva se ce n'è una. Imposta su 0 per disattivare. | 20 |
closeModalGamepad | Pulsante gamepad utilizzato per chiudere i modali (Enum.KeyCode). | ButtonA |
closeModalKeyboard | Tasto della tastiera utilizzato per chiudere i modali (Enum.KeyCode). | E |
completeModalText | Testo da mostrare sul modale che appare dopo aver fatto clic sul tracker del gettone quando la caccia al tesoro è completa. | "Grazie per la partecipazione!" |
infoModalText | Testo da mostrare sul modale che appare dopo aver fatto clic sul tracker del gettone. | "Trova tutti i gettoni per completare la caccia" |
tokenRotationSpeed | Velocità alla quale i gettoni ruotano, in gradi al secondo. Imposta su 0 per impedire la rotazione. | 20 |
nextArrowImage | Immagine utilizzata per indicare che ci sono più pagine modali da mostrare dopo la pagina modale corrente. | "rbxassetid://8167172095" |
virtualeTokenTrackerGamepad</td> <td>Pulsante gamepad utilizzato per mostrare i modali che appaiono dopo l'attivazione del tracker del gettone (Enum.KeyCode).</td> <td>ButtonY` | ||
openTokenTrackerKeyboard | Tasto della tastiera utilizzato per mostrare i modali che appaiono dopo l'attivazione del tracker del gettone (Enum.KeyCode). | Y |
openTokenTrackerGamepadButtonImage | Immagine per il pulsante di gamepad che viene utilizzato per attivare il tracker del gettone. | "rbxassetid://8025860488" |
regionIcon | Icona da visualizzare accanto al tracker del gettone quando si entra nelle regioni. | "rbxassetid://8073794624" |
tokenIcon | Icona da visualizzare accanto al tracker del gettone quando si raccolgono i gettoni. | "rbxassetid://8073794477" |
tokenTrackerPositionSmallDevice | Posizione dell'UI del tracker del gettone su piccoli dispositivi come i telefoni (UDim2). | (0, 0, 1, -84) |
tokenTrackerPositionLargeDevice | Posizione dell'UI del tracker del gettone su dispositivi più grandi come tablet e PC (UDim2). | (1, 0, 1, -16) |
useRegions | Invece dei gettoni, utilizza le regioni. | falso |
Modali
Chiave | Descrizione | Predefinito |
---|---|---|
modal.backgroundColor | Colore dello sfondo dei modali (Color3). | [0, 0, 0] |
modal.font | Carattere del testo che appare in un modale (Enum.Font). | GothamMedium |
modal.textColor | Colore del testo che appare in un Color3modale | [255, 255, 255] |
modal.textSize | Dimensione del testo che appare in un modale. | 16 |
useCustomModals | Se vero, i modali predefiniti non vengono visualizzati. Questo ti consente di mostrare i modali personalizzati come delineato nella Interfaccia grafica utente personalizzata. | false |
useCustomTokenTracker | Se vero, il tracker del gettone predefinito non viene visualizzato. Questo ti consente di mostrare un'Interfaccia grafica utente del tracker del gettone personalizzata. | falso |
Raggio di navigazione
Chiave | Descrizione | Predefinito |
---|---|---|
showNavigationBeam | Se vero, verrà mostrato un Beamdal giocatore al gettone più vicino. | vero |
navigationBeam.color | ColorSequence definendo il colore del raggio tra i suoi segmenti. Vedi Beam.Color per dettagli. | [255, 255, 255] → [255, 255, 255] |
navigationBeam.curveSize0 | Posizione del primo punto di controllo nella curva di Bézier del raggio. Vedi Beam.CurveSize0 per maggiori informazioni. | 0 |
navigationBeam.curveSize1 | Posizione del secondo punto di controllo nella curva di Bézier del raggio. Vedi Beam.CurveSize1 per maggiori informazioni. | 0 |
navigationBeam.faceCamera | Se i segmenti del raggio saranno sempre rivolti alla telecamera indipendentemente dal suo orientamento. Vedi Beam.FaceCamera per dettagli. | vero |
navigationBeam.lightEmission | Grado in cui i colori del raggio sono miscelati con i colori dietro di esso. Vedi Beam.LightEmission per dettagli. | 0 |
navigationBeam.lightInfluence | Grado in cui il raggio è influenzato dall'illuminazione dell'ambiente. Vedi Beam.LightInfluence per dettagli. | 0 |
navigationBeam.segments | Da quanti segmenti retti è composto il raggio. | 10 |
navigationBeam.texture | ID risorsa della texture da visualizzare sul raggio. | "rbxassetid://8081777495" |
navigationBeam.textureLength | Lunghezza della struttura del raggio, a seconda dell'impostazione per navigationBeam.textureMode. Vedi Beam.TextureLength per dettagli. | 1 |
navigationBeam.textureMode | Modo in cui la struttura del raggio si ridimensiona e si ripete (Enum.TextureMode). | Wrap |
navigationBeam.TextureSpeed | Velocità alla quale l'immagine della texture si muove lungo il raggio. | 1 |
navigationBeam.transparency | NumberSequence definendo la trasparenza del raggio tra i suoi segmenti. Vedi Beam.Transparency per dettagli. | (0, 0) → 0,15, 1) → (1, 1) |
navigationBeam.width0 | Larghezza del raggio alla sua base, in borchie. | 1 |
navigationBeam.width1 | Larghezza del raggio alla sua estremità, in borchie. | 1 |
navigationBeam.zOffset | Distanza, in borchie, con cui il display del raggio è dislocato, rispetto alla fotocamera. | 0 |
LocalScript
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},})
configureServer
configureServer(config:table):nil
Sovrascrive la configurazione predefinita lato server attraverso le seguenti chiavi/valori nella configtabella. Questa funzione può essere chiamata solo da un Script.
Chiave | Descrizione | Predefinito |
---|---|---|
tokenTag | Tag utilizzato da CollectionService per trovare tutti i gettoni o le regioni utilizzate nella caccia al tesoro. | "Parte della caccia al tesoro"` |
datastoreName | Nome del DataStoreutilizzato dalla caccia al tesoro per memorizzare i progressi della raccolta di ogni giocatore. | "ScavengerHuntTokens" |
resetOnPlayerRemoving | Se vero, ripristina i progressi dell'utente quando lascia l'esperienza; conveniente per non salvare i progressi durante il test della caccia al tesoro. | falso |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disattiva
disattiva():nil
Nasconde tutta l'UI per la caccia al tesoro, disconnette tutti gli ascoltatori di eventi di input e impedisce ai giocatori di raccogliere gettoni o interagire con le regioni. Questa funzione può essere chiamata solo da un Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
abilita
abilita():nil
Mostra tutta l'UI per la caccia al tesoro, collega tutti gli ascoltatori degli eventi di input e consente ai giocatori di raccogliere gettoni e interagire con le regioni. Questa funzione può essere chiamata solo da un Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Eventi
raccolti
raccolto(player:Player, itemName:Class.Player``Library.string, totaleRaccolto:number): RBXScriptSignal
Si accende quando un giocatore si scontra con un gettone o entra in una regione. La funzione collegata riceverà il Playerche si è scontrato con il gettone o è entrato nella regione e il nome del gettone che si è scontrato o la regione che è stata inserita. Questo evento può essere collegato solo in un Script.
Parametri | |
---|---|
giocatore: Player | Utente che si è scontrato con un gettone o è entrato in una regione. |
nomeArticolo:string | Nome del gettone che è stato colpito o della regione a cui si è acceduto. |
totaleRaccolti:number | Numero totale di gettoni raccolti dall'utente rappresentato da player. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
tuttiRaccolti
tuttiRaccolti(player:Player): RBXScriptSignal
Si accende quando un giocatore raccoglie tutti i gettoni o entra in tutte le regioni nella caccia al tesoro. La funzione collegata riceverà il Player che ha raccolto tutti i gettoni e si accende solo una volta per giocatore. Questo evento può essere collegato solo in un Script.
Parametri | |
---|---|
giocatore: Player | Giocatore che ha raccolto tutti i gettoni o è entrato in tutte le regioni. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " ha completato la caccia!")
fine)
mostraInfoModale
showInfoModal(): RBXScriptSignal
Si accende quando il giocatore fa clic sul tracker del gettone quando l'opzione useCustomModals di configurazione è impostata su vero. Questo evento può essere collegato solo in un LocalScript.
LocalScript
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)
mostraModaleCompleto
showCompleteModal(): RBXScriptSignal
Si accende quando il giocatore fa clic sul tracker del gettone quando l'opzione useCustomModals di configurazione è impostata su true e il giocatore ha raccolto tutti i gettoni nella caccia al tesoro. Questo evento può essere collegato solo in un LocalScript.
LocalScript
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)
Richiami
hideOtherGuis
hideOtherGuis(callback:funzione)
Il comando Richiama viene eseguito immediatamente prima che un modale venga visualizzato, permettendoti di disattivare l'intero ScreenGuis o gli elementi all'interno prima di visualizzare il modale. Vedere Visibilità Interfaccia grafica utente per dettagli e codice campione.
showOtherGuis
showOtherGuis(callback:funzione)
Questo richiamo viene eseguito immediatamente dopo che un modale è stato respinto, consentendo di abilitare l'intero ScreenGuiso gli elementi al loro interno. Vedere Visibilità Interfaccia grafica utente per dettagli e codice campione.