Caccia al tesoro

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:

  1. Dalla scheda Visualizza, aprire il Pannello degli strumenti e selezionare la scheda Marketplace.

    attiva il pulsante degli Strumenti in Studio
  2. Assicurarsi che la selezione dei modelli sia selezionata, quindi fare clic sul pulsante Vedi tutto per le Categorie.

  3. Individuare e fare clic sulla piastrella DEV MODULES.

  4. Individua il modulo Caccia al tesoro e fai clic su di esso, o trascinalo e rilascialo nella visualizzazione 3D.

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

  1. Individua la rete Gettone1 all'interno della cartella Spazio di lavoro, nella cartella principale del modulo.

  2. Sposta Gettone1 nella gerarchia dello spazio di lavoro di livello superiore e posizionalo dove desideri.

  3. Dai al gettone un nome unico; questo nome è il modo in cui il modulo tiene traccia dei gettoni che ogni giocatore ha raccolto.

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

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.

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

  2. Dagli un nome unico. Questo nome è il modo in cui il modulo tiene traccia delle regioni a cui ogni giocatore ha acceduto.

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

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

  1. In StarterPlayerScripts, crea un nuovo LocalScript e rinominalo in ConfiguraCacciaAlTesoro.

  2. Incolla il seguente codice nel nuovo Script.

    LocalScript - ConfigureScavengerHunt

    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,
    })

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

ChiaveDescrizionePredefinito
autoDismissTimeTempo in secondi prima che il modale si rimuova automaticamente o navighi alla pagina successiva se ce n'è una. Imposta su 0 per disattivare.20
closeModalGamepadPulsante gamepad utilizzato per chiudere i modali (Enum.KeyCode).ButtonA
closeModalKeyboardTasto della tastiera utilizzato per chiudere i modali (Enum.KeyCode).E
completeModalTextTesto da mostrare sul modale che appare dopo aver fatto clic sul tracker del gettone quando la caccia al tesoro è completa."Grazie per la partecipazione!"
infoModalTextTesto da mostrare sul modale che appare dopo aver fatto clic sul tracker del gettone."Trova tutti i gettoni per completare la caccia"
tokenRotationSpeedVelocità alla quale i gettoni ruotano, in gradi al secondo. Imposta su 0 per impedire la rotazione.20
nextArrowImageImmagine 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`
openTokenTrackerKeyboardTasto della tastiera utilizzato per mostrare i modali che appaiono dopo l'attivazione del tracker del gettone (Enum.KeyCode).Y
openTokenTrackerGamepadButtonImageImmagine per il pulsante di gamepad che viene utilizzato per attivare il tracker del gettone."rbxassetid://8025860488"
regionIconIcona da visualizzare accanto al tracker del gettone quando si entra nelle regioni."rbxassetid://8073794624"
tokenIconIcona da visualizzare accanto al tracker del gettone quando si raccolgono i gettoni."rbxassetid://8073794477"
tokenTrackerPositionSmallDevicePosizione dell'UI del tracker del gettone su piccoli dispositivi come i telefoni (UDim2).(0, 0, 1, -84)
tokenTrackerPositionLargeDevicePosizione dell'UI del tracker del gettone su dispositivi più grandi come tablet e PC (UDim2).(1, 0, 1, -16)
useRegionsInvece dei gettoni, utilizza le regioni.falso

Modali

ChiaveDescrizionePredefinito
modal.backgroundColorColore dello sfondo dei modali (Color3).[0, 0, 0]
modal.fontCarattere del testo che appare in un modale (Enum.Font).GothamMedium
modal.textColorColore del testo che appare in un Color3modale[255, 255, 255]
modal.textSizeDimensione del testo che appare in un modale.16
useCustomModalsSe vero, i modali predefiniti non vengono visualizzati. Questo ti consente di mostrare i modali personalizzati come delineato nella Interfaccia grafica utente personalizzata.false
useCustomTokenTrackerSe 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

ChiaveDescrizionePredefinito
showNavigationBeamSe vero, verrà mostrato un Beamdal giocatore al gettone più vicino.vero
navigationBeam.colorColorSequence definendo il colore del raggio tra i suoi segmenti. Vedi Beam.Color per dettagli.[255, 255, 255] → [255, 255, 255]
navigationBeam.curveSize0Posizione del primo punto di controllo nella curva di Bézier del raggio. Vedi Beam.CurveSize0 per maggiori informazioni.0
navigationBeam.curveSize1Posizione del secondo punto di controllo nella curva di Bézier del raggio. Vedi Beam.CurveSize1 per maggiori informazioni.0
navigationBeam.faceCameraSe i segmenti del raggio saranno sempre rivolti alla telecamera indipendentemente dal suo orientamento. Vedi Beam.FaceCamera per dettagli.vero
navigationBeam.lightEmissionGrado in cui i colori del raggio sono miscelati con i colori dietro di esso. Vedi Beam.LightEmission per dettagli.0
navigationBeam.lightInfluenceGrado in cui il raggio è influenzato dall'illuminazione dell'ambiente. Vedi Beam.LightInfluence per dettagli.0
navigationBeam.segmentsDa quanti segmenti retti è composto il raggio.10
navigationBeam.textureID risorsa della texture da visualizzare sul raggio."rbxassetid://8081777495"
navigationBeam.textureLengthLunghezza della struttura del raggio, a seconda dell'impostazione per navigationBeam.textureMode. Vedi Beam.TextureLength per dettagli.1
navigationBeam.textureModeModo in cui la struttura del raggio si ridimensiona e si ripete (Enum.TextureMode).Wrap
navigationBeam.TextureSpeedVelocità alla quale l'immagine della texture si muove lungo il raggio.1
navigationBeam.transparencyNumberSequence definendo la trasparenza del raggio tra i suoi segmenti. Vedi Beam.Transparency per dettagli.(0, 0) → 0,15, 1) → (1, 1)
navigationBeam.width0Larghezza del raggio alla sua base, in borchie.1
navigationBeam.width1Larghezza del raggio alla sua estremità, in borchie.1
navigationBeam.zOffsetDistanza, 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.

ChiaveDescrizionePredefinito
tokenTagTag utilizzato da CollectionService per trovare tutti i gettoni o le regioni utilizzate nella caccia al tesoro."Parte della caccia al tesoro"`
datastoreNameNome del DataStoreutilizzato dalla caccia al tesoro per memorizzare i progressi della raccolta di ogni giocatore."ScavengerHuntTokens"
resetOnPlayerRemovingSe 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: PlayerUtente 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:numberNumero 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: PlayerGiocatore 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.