Chasse au trésor

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Le ScavengerHunt module de développeur donne aux joueurs une manière intrinsèquement gagnée de visiter votre expérience, en les introduisant progressivement dans tout l'emplacement. La progression des joueurs est persistante, de sorte que les chasses au trésor peuvent se poursuivre à travers les sessions.

Utilisation des modules

Installation

Pour utiliser le module ScavengerHunt dans une expérience :

  1. À partir de l'Affichage onglet, ouvrez la boîte à outils et sélectionnez l' boutique des créateurs onglet.

    Toolbox toggle button in Studio
  2. Assurez-vous que le tri par Modèles est sélectionné, puis cliquez sur le bouton Voir tout pour Catégories.

  3. Localisez et cliquez sur la case modules de pavé .

  4. Localisez le module Chasse au trésor et cliquez dessus, ou glissez-le dans la voir3D.

  5. Dans la fenêtre Explorer, déplacez le modèle entier de ScavengerHunt dans ServerScriptService . Lors de l'exécution de l'expérience, le module se distribuera à différents services et commencera à s'exécuter.

Utiliser des jetons

Le module de chasse au trésor utilise des jetons comme les articles que les joueurs recherchent et collectent. Le module est livré avec un modèle de jeton que vous pouvez positionner dans le monde 3D.

  1. Localisez le Token1 maillage à l'intérieur du dossier principal de la fédération de l'espace de travail.

  2. Déplacez Token1 dans la hiérarchie de niveau supérieur Workspace et positionnez-le où vous le souhaitez.

  3. Donnez au jeton un nom unique ; ce nom est comment le module traite les jetons que chaque joueur a collectés.

  4. Pour ajouter plus de jetons, dupliquez un jeton existant et donnez-lui un nom unique.

Si vous ne voulez pas utiliser les jetons de maillage fournis, n'importe lequel des Model ou BasePart fonctionnera, tant qu'il répond aux critères suivants :

  • L'objet a une étiquette CollectionService de ScavengerHuntPart . Si nécessaire, le nom de la balise CollectionService que le module utilise peut être modifié en définissant une valeur différente pour 1> tokenTag1> dans un appel 4> configureServer4>.

  • L'objet contient une instance enfantine StringValue définie sur le « text flavour » pour afficher lorsque le jeton est collecté.

    Modèle
    MeshPart

Utiliser les régions

Les régions diffèrent légèrement des jetons, car de grandes zones qui sont marquées comme "collected" une fois que le joueur entre elles. De plus, lorsqu'un joueur quitte la région, le mot de texte de goût active automatiquement et la région elle-même est supprimée de l'espace de travail.

  1. Créez une partie ancrée autour de la région, telle qu'un bloc ou une sphère. Le module désactivera automatiquement la propriété CanCollide au moment de l'exécution afin que les joueurs ne se heurtent pas physiquement avec la région.

  2. Donnez-lui un nom unique . Ce nom est comment le module traite les régions dans lesquelles chaque joueur s'est entré.

  3. En utilisant la section balises de la propriété de la partie, ou Studio's éditeur de balises, appliquez la balise ScavengerHuntPart à la partie afin que 1> Class.CollectionService1> la détecte. Si nécessaire, le nom de la balise que le module utilise peut être modifié en dé

  4. Incluez une instance enfant StringValue définie sur « text », à afficher lorsque la région est entrée.

Configuration

Le module est configuré par défaut pour fonctionner pour la plupart des cas d'utilisation, mais il peut être facilement personnalisé. Par exemple, pour modifier la vitesse de rotation des jetons et personnaliser le message d'information modale :

  1. Dans StarterPlayerScripts , créez un nouveau LocalScript et renommez-le en ConfigureScavengerHunt .

  2. Collez le code suivant dans le nouveau script.

    LocalScript - Configure la chasse au trésor

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

Événements de collection

Chaque fois qu'un joueur récupère un jeton ou entre dans une région, l'événement collecté est déclenché. Vous pouvez écouter cet événement à partir d'un côté du serveur Script et répondre en conséquence. La fonction connectée reçoit le Player qui s'est heurté au jeton ou est entré dans la région et son nom de jeton ou région.

De même, lorsqu'un joueur récupère tous les jetons ou entre dans toutes les régions marquées, l'événement toutCollected se déclenche et la fonction connectée reçoit le jeton associé 1> Class.Player1>. Ce jeton est seulement activé une fois par joueur et il peut être utilisé pour récompenser ce joueur avec un

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 .. " completed the hunt!")
end)

interface utilisateur graphiquepersonnalisée

Ce module expose plusieurs options pour personnaliser son interface utilisateur graphiquepar défaut, mais vous pouvez choisir d'afficher des éléments de GUI personnalisés à la place.

Lorsque useCustomModals est défini sur true dans la fonction configurer le client, l'événement 1> showInfoModal1> se déclenche chaque fois que le joueur active le tracker de jetons. De même, l'événement 4> showCompleteModal4> se déclenche lorsque le jou

Script local

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Afficher une modalité d'information personnalisée
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Afficher une modale de fin personnalisée
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

Visibilité de la GUI

Par défaut, la chasse au trésor masque tous les ScreenGuis et CoreGuis (sauf la liste des joueurs) lorsque la boîte de dialogue d'information ou la boîte de dialogue de finition apparaissent. Si vous souhaitez modifier ce comportement d'auto-cacher et déc

Script local

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 = {}
-- Créer un GUI de création d'écran qui ne sera pas caché
local specialGuiInstance = Instance.new("ScreenGui")
-- Dé dessinez la GUI de l'écran au-dessus de la interface utilisateur graphiquede la chasse au trésor
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Ajouter une étiquette de texte à l'interface interface utilisateur graphique
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()
-- Masquer toutes les interfaces graphiques de développeur définies
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
-- Cacher les interfaces graphiques du noyau spécifiques
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Afficher toutes les interfaces graphiques de développeur qui ont été cachées
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Afficher les interfaces utilisateur du noyau spécifiques qui étaient cachées
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

Référence de l'API

Fonctions

configurer le client

Configurer le client ( config: table )

Les options de configuration côté client par défaut sont remplacées par les valeurs/clés suivantes dans la table config. Ce paramètre ne peut être appelé que depuis un LocalScript.

CléDescriptionPar défaut
autoDismissTimeTemps en secondes avant que le modale se déclenche automatiquement ou navigue vers la page suivante s'il y en a une. Réglé sur 0 pour désactiver.20
closeModalGamepadBouton de gamepad utilisé pour fermer les modaux ( Enum.KeyCode ).ButtonA
closeModalKeyboardTouche de clavier utilisée pour fermer les modaux ( Enum.KeyCode ).E
completeModalTextTexte à afficher sur la modalité qui apparaît après avoir cliqué sur le tracker de jetons lorsque la chasse au trésor est terminée.« Merci d'avoir participé ! »
infoModalTextTexte à afficher sur la modalité qui apparaît après avoir cliqué sur le tracker de jetons.« Trouvez tous les jetons pour terminer la chasse »
tokenRotationSpeedVitesse à laquelle les jetons tourner, en degrés par seconde. Défini sur 0 pour empêcher la rotation.20
nextArrowImageImage utilisée pour indiquer qu'il y a plus de pages modales à afficher après la page modale actuelle.« rxbassetid://8167172095 »
openTokenTrackerGamepadBouton de gamepad utilisé pour montrer les modaux qui apparaissent après l'activation du tracker de jetons ( Enum.KeyCode ).ButtonY
openTokenTrackerKeyboardTouche du clavier utilisée pour afficher les modaux qui apparaissent après l'activation du tracker de jetons ( Enum.KeyCode ).Y
openTokenTrackerGamepadButtonImageImage pour le bouton de la manette de jeu qui est utilisé pour activer le tracker de jetons.« rxbassetid://8025860488 »
regionIconIcône à afficher à côté du tracker de jetons lors de l'entrée dans les régions.« rxbassetid://8073794624 »
tokenIconIcône à afficher à côté du tracker de jetons lors de la collecte de jetons.« rxbassetid://8073794477 »
tokenTrackerPositionSmallDevicePosition de l'interface de suivi des jetons sur les petits appareils tels que les téléphones ( UDim2 ).(1, 0, 0, 84)
tokenTrackerPositionLargeDevicePosition de l'interface de suivi des jetons sur les appareils plus grands, comme les tablettes et les PC ( UDim2 ).(1, 0, 1, -16)
useRegionsAu lieu de jetons, utilisez régions.faux
Script local

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

Configurer le serveur

Configurer le serveur ( config: table )

Les options de configuration côté serveur par défaut sont remplacées par les valeurs/clés suivantes dans la table config. Ce paramètre ne peut être appelé que depuis un Script.

CléDescriptionPar défaut
tokenTagBalise utilisée par CollectionService pour trouver tous les jetons ou régions utilisés dans la chasse au trésor.« ScavengerHuntPart »
datastoreNameNom du DataStore utilisé par la chasse au trésor pour stocker la progression de la collection de chaque joueur.« ScavengerHuntTokens »
resetOnPlayerRemovingSi oui, réinitialise la progression de l'utilisateur lorsqu'il quitte l'expérience ; pratique pour ne pas enregistrer la progression pendant le test de la chasse au trésor.faux
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

désactiver

désactiver()

Masque toute l'interface utilisateur pour la chasse au trésor, déconnecte tous les événements d'entrée et empêche les joueurs de collecter des jetons ou d'interagir avec des régions. Cette fonction ne peut être appelée qu'à partir d'un Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.disable()

activer

activer()

Affiche toutes les UI pour la chasse au trésor, connecte tous les événements d'entrée, et permet aux joueurs de collecter des jetons et d'interagir avec des régions. Cette fonction ne peut être appelée qu'à partir d'un Script.

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.enable()

Événements

collecté

Activer un feu quand un joueur se heurte à un jeton ou entre dans une région. La fonction connectée recevra le Player qui s'est heurté au jeton ou entre dans la région et le nom du jeton qui a été collé dans ou dans la région qui a été entrée. Cet événement ne peut être connecté qu' dans un Script .

Paramètres
joueur: PlayerUtilisateur qui a collédé avec un jeton ou qui a entré dans une région.
itemName : stringNom du jeton qui a été collisionné ou la région qui a été entrée.
TotalCollecté : numberNombre total de jetons collectés par l'utilisateur représenté par 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)

tout collecté

Se déclenche lorsqu'un joueur collecte tous les jetons ou entre dans toutes les régions dans la chasse au trésor. La fonction connectée recevra le Player qui a collecté tous les jetons, et il ne s'agit que d'une seule connexion par joueur. Cet événement ne peut être connecté qu'à un Script.

Paramètres
joueur: PlayerJoueur qui a collecté tous les jetons ou entré dans toutes les régions.
Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)

afficherInfoModal

Se déclenche lorsque le joueur clique sur le tracker de jetons lorsque l'option useCustomModals配置 est définie sur vrai. Cet événement ne peut être connecté qu'à un LocalScript.

Script local

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)

afficherComplet

Se déclenche lorsque le joueur clique sur le tracker de jetons lorsque l'option useCustomModalsconfiguration est définie sur true et que le joueur a collecté tous les jetons dans la chasse au trésor. Cet événement ne peut être connecté qu'à un 2>Class.LocalScript2>.

Script local

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)

Appels

masquerAutreGuis

autre gui ( rappel: function )

Ce rappel s'exécute immédiatement avant qu'une boîte de dialogue ne soit affichée, vous permettant de désactiver tout ScreenGuis ou éléments dans boîte de dialogue avant que la boîte de dialogue ne soit affichée. Voir visibilité de l'GUI pour plus de détails et un code d'exemple.

afficherAutreGuis

afficherAutreGuis(rappel: function )

Ce rappel s'exécute immédiatement après la fermeture d'un modale, vous permettant d'activer l'ensemble de ScreenGuis ou les éléments à l'intérieur. Voir visibilité de l'GUI pour plus de détails et un code d'exemple.