Le module développeur de chasse au trésor donne aux joueurs une façon intrinsèquement ludique d'explorer votre expérience, les introduisant de manière organique dans l'ensemble du emplacement.La progression du joueur est persistante, de sorte que les chasses au trésor peuvent se poursuivre à travers les sessions.
Utilisation du module
Étabissement
Pour utiliser le module Chasse au trésor dans une expérience :
Assurez-vous que le tri des modèles est sélectionné, puis cliquez sur le bouton Voir tout pour les catégories .
Localisez et cliquez sur la case modules de développement .
Localisez le module Chasse au trésor et cliquez dessus, ou glissez-déposez-le dans la voir3D.
Dans la fenêtre Explorateur, déplacez tout le modèle Chasse au trésor dans ServerScriptService .Une fois l'expérience exécutée, le module se distribuera à différents services et commencera à fonctionner.
Utiliser des jetons
Le module de chasse au trésor utilise 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.
Localisez le Token1 maillage à l'intérieur du dossier Espace de travail du dossier principal du module.
Déplacer Token1 au sein de la hiérarchie de niveau supérieur Espace de travail et le positionner où souhaité.
Donnez au jeton un nom unique ; ce nom est la façon dont le module suit les jetons que chaque joueur a collectés
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 en paquet, n'importe quel Model ou BasePart fonctionnera, à condition qu'il réponde aux critères suivants :
L'objet a une balise CollectionService de ScavengerHuntPart.Si nécessaire, le nom de balise CollectionService que le module utilise peut être modifié en définissant une valeur différente pour tokenTag dans un appel configurer le serveur.
L'objet contient une instance enfante StringValue définie sur le « texte de goût » à afficher lorsque le jeton est collecté.
Modèle Pièce en maille
Utiliser des régions
Les régions diffèrent légèrement des jetons, car de grandes zones qui sont marquées comme "collectées" une fois que le joueur les entre.De plus, lorsqu'un joueur quitte la région, le texte de la saveur modal est automatiquement rejeté et la région elle-même est supprimée de l'espace de travail.
Créer une partie ancrée autour de la région, comme un bloc ou une sphère.Le module désactivera automatiquement la propriété CanCollide à l'exécution afin que les joueurs ne se heurtent pas physiquement à la région.
Donnez-lui un nom unique . Ce nom est la façon dont le module suit les régions dans lesquelles chaque joueur est entré.
En utilisant la section Balises des propriétés de la partie ou l'éditeur de balises de Studio, appliquez la balise à la partie afin que elle soit détectée.Si nécessaire, le nom de balise que le module utilise peut être modifié en définissant une valeur différente pour tokenTag dans un appel configurer le serveur.
Incluez une instance enfant StringValue définie sur le « texte de goût » à afficher lorsque la région est entrée.
Configération
Le module est préconfiguré pour fonctionner dans 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 modal :
Dans StarterPlayerScripts , créez un nouveau LocalScript et renommez-le en Configurer une chasse au trésor .
Collez le code suivant dans le nouveau script.
LocalScript - Configurer une chasse au trésorlocal 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 collecte un jeton ou entre dans une région, l'événement collecté se déclenche.Vous pouvez écouter cet événement du côté du serveur Script et y répondre en conséquence.La fonction connectée reçoit le Player qui a collidé avec le jeton ou est entré dans la région et ce nom de jeton ou de région.
De même, lorsqu'un joueur collecte toutes les jetons ou entre dans toutes les régions étiquetées, l'événement toutes collectées se déclenche et la fonction connectée reçoit le Player associé.Cette fonction ne se déclenche qu'une fois par joueur et peut être utilisée pour récompenser ce joueur avec un badge , un accès à une nouvelle zone, une monnaie d'expérience , etc.
Scénario
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é
Ce module expose plusieurs options pour personnaliser son interface utilisateur par défaut, mais vous pouvez opter pour l'affichage d'éléments GUI personnalisés à la place.
Lorsque useCustomModals est défini sur true dans la fonction configureClient, l'événement showInfoModal se déclenche chaque fois que le joueur active le traqueur de jetons.De même, l'événement showCompleteModal se déclenche lorsque le joueur a tout récupéré dans la chasse au trésor.Les deux événements peuvent être écoutés dans un LocalScript .
Lecteur localScript
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 modalité complète personnalisée
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Visibilité de l'interface graphique
Par défaut, la chasse au trésor cache tous les ScreenGuis et CoreGuis (sauf la liste des joueurs) lorsque la modalité d'information ou de finition apparaît.Si vous souhaitez annuler ce comportement de dissimulation automatique et décider programmatiquement des interfaces graphiques qui doivent rester visibles, incluez les appels de rappel hideOtherGuis et showOtherGuis et répondez avec votre propre logique personnalisée.
Lecteur 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 = {}
-- Créer une interface graphique d'écran qui ne sera pas cachée
local specialGuiInstance = Instance.new("ScreenGui")
-- Tirer la GUI d'écran au-dessus de la interface utilisateur graphiquede 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 définies par le développeur
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
-- Masquer les interfaces graphiques principales spécifiques
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Afficher toutes les interfaces graphiques définies par le développeur qui ont été cachées
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Afficher les interfaces utilisateur principales spécifiques qui ont été cachées
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Référence de l'API
Fonctions
configurer le client
configurer le client(config: table )
Options de configuration par défaut du côté client remplacées par les valeurs/clés suivantes dans la table config .Cette fonction ne peut être appelée qu'à partir d'un LocalScript .
Clé | Avertissement | Par défaut |
---|---|---|
autoDismissTime | Temps en secondes avant que le modal se rejette automatiquement ou navigue vers la page suivante s'il en existe une. Définir à 0 pour désactiver. | 20 |
closeModalGamepad | Bouton de manette utilisé pour fermer les modaux (Enum.KeyCode). | ButtonA |
closeModalKeyboard | Touche du clavier utilisée pour fermer les modaux (Enum.KeyCode). | E |
completeModalText | Texte à afficher dans la modalité qui apparaît après avoir cliqué sur le traqueur de jetons lorsque la chasse au trésor est terminée. | « Merci de participer ! » |
infoModalText | Texte à afficher dans la modalité qui apparaît après avoir cliqué sur le traqueur de jetons. | « Trouvez tous les jetons pour terminer la chasse » |
tokenRotationSpeed | Vitesse à laquelle les jetons tourner, en degrés par seconde. Définir à 0 pour empêcher la rotation. | 20 |
nextArrowImage | Image utilisée pour indiquer qu'il y a plus de pages modal à afficher après la page modal actuelle. | « rbxassetid://8167172095 » |
openTokenTrackerGamepad | Bouton de manette utilisé pour afficher les modaux qui apparaissent après avoir activé le traqueur de jetons ( Enum.KeyCode ). | ButtonY |
openTokenTrackerKeyboard | Touche du clavier utilisée pour afficher les modaux qui apparaissent après avoir activé le traqueur de jetons ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Image pour le bouton du gamepad qui est utilisé pour activer le traqueur de jetons. | « rbxassetid://8025860488 » |
regionIcon | Icône à afficher à côté du traqueur de jetons lors de l'entrée dans les régions. | « rbxassetid://8073794624 » |
tokenIcon | Icône à afficher à côté du traqueur de jetons lors de la collecte de jetons. | « rbxassetid://8073794477 » |
tokenTrackerPositionSmallDevice | Position de l'interface utilisateur du traqueur de jetons sur de petits appareils tels que les téléphones ( UDim2 ). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Position de l'interface utilisateur du traqueur de jetons sur les appareils plus grands comme les tablettes et les PC ( UDim2 ). | (1, 0, 1, -16) |
useRegions | Au lieu de jetons, utilisez régions. | faux |
Lecteur 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},})
configurer le serveur
configurer le serveur(config: table )
Options de configuration par défaut du côté du serveur remplacées par les valeurs/clés suivantes dans la table config .Cette fonction ne peut être appelée qu'à partir d'un Script .
Clé | Avertissement | Par défaut |
---|---|---|
tokenTag | Tag utilisé par CollectionService pour trouver tous les jetons ou régions utilisés dans la chasse au trésor. | « ScavengerHuntPart » |
datastoreName | Nom du DataStore utilisé par la chasse au trésor pour stocker la progression de la collection de chaque joueur. | « ScavengerHuntTokens » |
resetOnPlayerRemoving | Si c'est vrai, réinitialise la progression de l'utilisateur lorsqu'il quitte l'expérience ; pratique pour ne pas enregistrer la progression lors du test de la chasse au trésor. | faux |
Scénario
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 écouteurs d'é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 .
Scénario
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
activer
activer()
Affiche toute l'interface utilisateur pour la chasse au trésor, connecte tous les écouteurs d'événements d'entrée et permet aux joueurs de collecter des jetons et d'interagir avec les régions.Cette fonction ne peut être appelée qu'à partir d'un Script .
Scénario
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Événements
collecté
Se déclenche lorsqu'un joueur se heurte à un jeton ou entre dans une région.La fonction connectée recevra le Player qui a collidé avec le jeton ou est entré dans la région et le nom du jeton qui a été collidé ou la région qui a été entrée.Cet événement ne peut être connecté qu'en Script .
Paramètres | |
---|---|
joueur : Player | Utilisateur qui a collidé avec un jeton ou est entré dans une région. |
itemName : string | Nom du jeton qui a été collidé ou de la région qui a été entrée. |
totalCollecté : number | Nom total de jetons collectés par l'utilisateur représenté par player. |
Scénario
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 elle ne sera jamais tirée qu'une fois par joueur.Cet événement ne peut être connecté qu'en Script .
Paramètres | |
---|---|
joueur : Player | Joueur qui a collecté tous les jetons ou a entré toutes les régions. |
Scénario
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
afficherInfoModal
S'enflamme lorsque le joueur clique sur le tracker de jetons lorsque l'option configuration est réglée sur vrai.Cet événement ne peut être connecté qu'en LocalScript .
Lecteur 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)
afficherModalComplet
S'enflamme lorsque le joueur clique sur le tracker de jetons lorsque l'option configuration est réglée sur et que le joueur a collecté tous les jetons dans la chasse au trésor.Cet événement ne peut être connecté qu'en LocalScript .
Lecteur 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)
Appels de rappel
masquerOtherGuis
hideOtherGuis(rappel: function )
Ce rappel s'exécute immédiatement avant l'affichage d'une modalité, vous permettant de désactiver l'ensemble de ScreenGuis ou des éléments à l'intérieur d'une modalité avant l'affichage de la modalité.Voir Visibilité de l'interface graphique pour les détails et le code d'échantillon.
afficherOtherGuis
showOtherGuis(rappel: function )
Ce rappel s'exécute immédiatement après que la modalité ait été ignorée, vous permettant d'activer l'ensemble de ScreenGuis ou des éléments à l'intérieur d'elle.Voir Visibilité de l'interface graphique pour les détails et le code d'échantillon.