Il ScavengerHunt modulo per sviluppatori offre ai giocatori un modo intrinsecamente gamificato per esplorare il tuo gioco, introducendoli organicamente all'intero luogo. I progressi dei giocatori sono persistenti, quindi le cacce al tesoro possono continuare attraverso le sessioni.
Utilizzo del modulo
Installazione
Per utilizzare il modulo ScavengerHunt in un gioco:
Dal menu Finestra di Studio o dalla barra degli strumenti della scheda Home, apri il Toolbox e seleziona la scheda Creator Store.

Assicurati che sia selezionato l'ordinamento Modelli, quindi fai clic sul pulsante Vedi Tutti per Categorie.

Individua e fai clic sulla tessera Pacchetti.
Individua il modulo Caccia al Tesoro e fai clic su di esso, oppure trascinalo nella vista 3D.

Nella finestra Esplora, sposta l'intero modello ScavengerHunt in ReplicatedStorage. Una volta avviato il gioco, il modulo inizierà a funzionare.
Utilizzo dei token
Il modulo della caccia al tesoro utilizza token 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 il mesh Token1 all'interno della cartella Workspace della cartella principale del modulo.

Sposta Token1 nella gerarchia di Workspace di livello superiore e posizionalo dove desiderato.
Dai al token un nome unico; questo nome è come il modulo tiene traccia di quali token ogni giocatore ha raccolto.
Per aggiungere più token, duplica un token esistente e dagli un nome unico.
Se non vuoi utilizzare i token mesh inclusi, qualsiasi Model o BasePart funzionerà, purché soddisfi i seguenti criteri:
L'oggetto ha un tag CollectionService di ScavengerHuntPart. Se desiderato, il nome del tag CollectionService che il modulo utilizza può essere cambiato impostando un valore diverso per tokenTag in una chiamata a configureServer.
L'oggetto contiene un'istanza figlia StringValue impostata sul "testo di sapore" da visualizzare quando il token viene raccolto.

Modello 
MeshPart
Utilizzo delle regioni
Le regioni differiscono leggermente dai token, poiché sono ampie aree che vengono contrassegnate come "raccolte" una volta che il giocatore vi entra. Inoltre, quando un giocatore esce dalla regione, il modulo di testo di sapore viene automaticamente chiuso e la regione stessa viene rimossa dallo spazio di lavoro.
Crea una parte ancorata attorno alla regione, come un blocco o una sfera. Il modulo disabiliterà automaticamente la proprietà CanCollide durante l'esecuzione in modo che i giocatori non collidano fisicamente con la regione.
Dagli un nome unico. Questo nome è come il modulo tiene traccia di quali regioni ogni giocatore ha visitato.
Utilizzando la sezione Tag delle proprietà della parte, applica il tag ScavengerHuntPart alla parte in modo che CollectionService lo rilevi. Se desiderato, il nome del tag che il modulo utilizza può essere cambiato impostando un valore diverso per tokenTag in una chiamata a configureServer.
Includi un'istanza figlia StringValue impostata sul "testo di sapore" da visualizzare quando la regione viene visitata.

Configurazione
Il modulo è preconfigurato per funzionare per la maggior parte dei casi d'uso, ma può essere facilmente personalizzato. Ad esempio, per cambiare la velocità di rotazione dei token e personalizzare il messaggio informativo del modulo:
In StarterPlayerScripts, crea un nuovo LocalScript e rinominalo in ConfigureScavengerHunt.
Incolla il seguente codice nel nuovo script.
LocalScript - ConfigureScavengerHuntlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)ScavengerHunt.configureClient({infoModalText = "Benvenuto nella mia Caccia al Tesoro!",completeModalText = "Grazie per aver partecipato alla mia Caccia al Tesoro!",tokenRotationSpeed = 60,})
Eventi di raccolta
Ogni volta che un giocatore raccoglie un token o entra in una regione, si attiva l'evento collected. Puoi ascoltare questo evento da uno Script lato server e rispondere di conseguenza. La funzione connessa riceve il Player che ha colliso con il token o è entrato nella regione e il nome di quel token o regione.
Allo stesso modo, quando un giocatore raccoglie tutti i token o entra in tutte le regioni contrassegnate, si attiva l'evento allCollected e la funzione connessa riceve il Player associato. Questa funzione viene attivata solo una volta per giocatore e può essere utilizzata per premiare quel giocatore con un badge, accesso a una nuova area, moneta di gioco, ecc.
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 .. " ha completato la caccia!")
end)GUI personalizzata
Questo modulo espone diverse opzioni per personalizzare la sua GUI predefinita, ma puoi scegliere di visualizzare elementi GUI personalizzati invece.
Quando useCustomModals è impostato su true nella funzione configureClient, l'evento showInfoModal si attiva ogni volta che il giocatore attiva il tracker dei token. Allo stesso modo, l'evento showCompleteModal si attiva quando il giocatore ha raccolto tutto nella caccia al tesoro. Entrambi questi eventi possono essere ascoltati in uno LocalScript.
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.showInfoModal:Connect(function()
-- Mostra un modulo informativo personalizzato
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Mostra un modulo di completamento personalizzato
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)Visibilità della GUI
Per impostazione predefinita, la caccia al tesoro nasconde tutte le ScreenGuis e CoreGuis (eccetto per l'elenco dei giocatori) quando appare il modulo informativo o il modulo di completamento. Se desideri sovrascrivere questo comportamento di auto-nascita e decidere programmaticamente quali GUI devono rimanere visibili, includi i callback hideOtherGuis e showOtherGuis e rispondi con la tua logica personalizzata.
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 = {}
-- Crea una GUI di schermo che non verrà nascosta
local specialGuiInstance = Instance.new("ScreenGui")
-- Disegna la GUI di schermo sopra la GUI della caccia al tesoro
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Aggiungi un'etichetta di testo alla GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Rimane visibile durante la visualizzazione dei moduli"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- Nascondi tutte le GUI di schermo definite dallo sviluppatore
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
-- Nascondi GUI core specifiche
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Mostra tutte le GUI di schermo definite dallo sviluppatore che erano nascoste
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Mostra GUI core specifiche che erano nascoste
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)Riferimento API
Funzioni
configureClient
configureClient(config: table)
Sovrascrive le opzioni di configurazione predefinite lato client attraverso le seguenti chiavi/valori nella tabella config. Questa funzione può essere chiamata solo da uno LocalScript.
| Chiave | Descrizione | Predefinito |
|---|---|---|
| autoDismissTime | Tempo in secondi prima che il modulo si chiuda automaticamente o navighi alla pagina successiva se ce n'è una. Imposta a 0 per disabilitare. | 20 |
| closeModalGamepad | Pulsante del gamepad utilizzato per chiudere i moduli (Enum.KeyCode). | ButtonA |
| closeModalKeyboard | Tasto della tastiera utilizzato per chiudere i moduli (Enum.KeyCode). | E |
| completeModalText | Testo da mostrare nel modulo che appare dopo aver cliccato sul tracker dei token quando la caccia al tesoro è completa. | "Grazie per aver partecipato!" |
| infoModalText | Testo da mostrare nel modulo che appare dopo aver cliccato sul tracker dei token. | "Trova tutti i token per completare la caccia" |
| tokenRotationSpeed | Velocità alla quale i token ruotano, in gradi al secondo. Imposta a 0 per impedire la rotazione. | 20 |
| nextArrowImage | Immagine utilizzata per indicare che ci sono più pagine del modulo da mostrare dopo la pagina corrente. | "rbxassetid://8167172095" |
| openTokenTrackerGamepad | Pulsante del gamepad utilizzato per mostrare i moduli che appaiono dopo aver attivato il tracker dei token (Enum.KeyCode). | ButtonY |
| openTokenTrackerKeyboard | Tasto della tastiera utilizzato per mostrare i moduli che appaiono dopo aver attivato il tracker dei token (Enum.KeyCode). | Y |
| openTokenTrackerGamepadButtonImage | Immagine per il pulsante del gamepad utilizzato per attivare il tracker dei token. | "rbxassetid://8025860488" |
| regionIcon | Icona da visualizzare accanto al tracker dei token quando si entra nelle regioni. | "rbxassetid://8073794624" |
| tokenIcon | Icona da visualizzare accanto al tracker dei token quando si raccolgono i token. | "rbxassetid://8073794477" |
| tokenTrackerPositionSmallDevice | Posizione dell'interfaccia utente del tracker dei token su dispositivi piccoli come i telefoni (UDim2). | (1, 0, 0, 84) |
| tokenTrackerPositionLargeDevice | Posizione dell'interfaccia utente del tracker dei token su dispositivi più grandi come tablet e PC (UDim2). | (1, 0, 1, -16) |
| useRegions | Invece di token, utilizza regioni. | false |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "Benvenuto nella mia Caccia al Tesoro!",
completeModalText = "Grazie per aver partecipato alla mia Caccia al Tesoro!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})configureServer
configureServer(config: table)
Sovrascrive le opzioni di configurazione predefinite lato server attraverso le seguenti chiavi/valori nella tabella config. Questa funzione può essere chiamata solo da uno Script.
| Chiave | Descrizione | Predefinito |
|---|---|---|
| tokenTag | Tag utilizzato da CollectionService per trovare tutti i token o le regioni utilizzati nella caccia al tesoro. | "ScavengerHuntPart" |
| datastoreName | Nome del DataStore utilizzato dalla caccia al tesoro per memorizzare i progressi di raccolta di ciascun giocatore. | "ScavengerHuntTokens" |
| resetOnPlayerRemoving | Se vero, ripristina i progressi dell'utente quando lascia il gioco; comodo per non salvare i progressi durante il test della caccia al tesoro. | false |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})disable
disable()
Nasconde tutta l'interfaccia utente per la caccia al tesoro, disconnette tutti i listener di eventi di input e impedisce ai giocatori di raccogliere token o interagire con le regioni. Questa funzione può essere chiamata solo da uno Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.disable()enable
enable()
Mostra tutta l'interfaccia utente per la caccia al tesoro, collega tutti i listener di eventi di input e consente ai giocatori di raccogliere token e interagire con le regioni. Questa funzione può essere chiamata solo da uno Script.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.enable()Eventi
collected
Si attiva quando un giocatore collida con un token o entra in una regione. La funzione connessa riceverà il Player che ha colliso con il token o è entrato nella regione e il nome del token con cui è avvenuta la collisione o la regione in cui è entrato. Questo evento può essere connesso solo in uno Script.
| Parametri | |
|---|---|
| player: Player | Utente che ha colliso con un token o è entrato in una regione. |
| itemName: string | Nome del token con cui è avvenuta la collisione o della regione in cui si è entrati. |
| totalCollected: number | Numero totale di token raccolti dall'utente rappresentato da player. |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)allCollected
Si attiva quando un giocatore raccoglie tutti i token o entra in tutte le regioni nella caccia al tesoro. La funzione connessa riceverà il Player che ha raccolto tutti i token, e viene attivata solo una volta per giocatore. Questo evento può essere connesso solo in uno Script.
| Parametri | |
|---|---|
| player: Player | Giocatore che ha raccolto tutti i token o è entrato in tutte le regioni. |
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " ha completato la caccia!")
end)showInfoModal
Si attiva quando il giocatore clicca sul tracker dei token quando l'opzione di configurazione useCustomModals è impostata su true. Questo evento può essere connesso solo in uno 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
Si attiva quando il giocatore clicca sul tracker dei token quando l'opzione di configurazione useCustomModals è impostata su true e il giocatore ha raccolto tutti i token nella caccia al tesoro. Questo evento può essere connesso solo in uno 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)Callback
hideOtherGuis
hideOtherGuis(callback: function)
Questo callback viene eseguito immediatamente prima che un modulo venga visualizzato, consentendoti di disabilitare intere ScreenGuis o elementi al loro interno prima che il modulo venga mostrato. Vedi Visibilità della GUI per dettagli e codice di esempio.
showOtherGuis
showOtherGuis(callback: function)
Questo callback viene eseguito immediatamente dopo che un modulo è stato chiuso, consentendoti di abilitare intere ScreenGuis o elementi al loro interno. Vedi Visibilità della GUI per dettagli e codice di esempio.