El módulo ScavengerHunt desarrollador les da a los jugadores una forma inherentemente gamificada de explorar su experiencia, introduciéndolos orgánicamente en todo el lugar.El progreso del jugador es persistente, por lo que las búsquedas del tesoro pueden continuar a través de sesiones.
Uso de módulo
Instalación
Para usar el módulo Bús de tesoros en una experiencia:
Asegúrese de que la clasificación de modelos esté seleccionada, luego haga clic en el botón Ver todo para categorías .
Localiza y haz clic en el mosaico Módulos de desarrollo .
Localiza el módulo Caza de tesoros y haz clic en él, o arrastra y suelta en la vista 3D.
En la ventana Explorador, mueva todo el modelo Caza de tesoros al servicio ServerScriptService .Al ejecutar la experiencia, el módulo se distribuirá a varios servicios y comenzará a funcionar.
Usar tokens
El módulo de caza de tesoros usa tokens como los artículos que los jugadores buscan y recogen.El módulo viene con un modelo de token que puedes posicionar en el mundo 3D.
Localiza la red Token1 dentro de la carpeta Espacio de trabajo del directorio principal del módulo.
Mueva Token1 a la jerarquía y posición de nivel superior del espacio de trabajo y colóquelo donde lo desee.
Dale al token un nombre único ; este nombre es cómo el módulo rastrea qué tokens ha recopilado cada jugador.
Para agregar más tokens, duplica un token existente y dale un nombre único.
Si no quieres usar las fichas de malla empacadas, cualquier Model o BasePart funcionará, siempre que cumpla con los siguientes criterios:
El objeto tiene una etiqueta CollectionService de ScavengerHuntPart.Si lo desea, el nombre de etiqueta CollectionService que utiliza el módulo se puede cambiar al establecer un valor diferente para tokenTag en una llamada configurar servidor.
El objeto contiene un conjunto de instancias hijas StringValue al "texto de sabor" para mostrar cuando se recoge la ficha.
Modelo Parte de malla
Usar regiones
Las regiones difieren ligeramente de las fichas, ya que grandes áreas que se marcan como "recogidas" una vez que el jugador las ingresa.Además, cuando un jugador abandona la región, el texto modal de sabor se descarta automáticamente y la región misma se elimina del espacio de trabajo.
Crea una parte anclada alrededor de la región, como un bloque o una esfera.El módulo desactivará automáticamente la propiedad CanCollide en tiempo de ejecución para que los jugadores no choquen físicamente con la región.
Déle un nombre único único . Este nombre es cómo el módulo rastrea las regiones a las que cada jugador ha ingresado.
Usando la sección Etiquetas de las propiedades de la parte o el Editor de etiquetas de Studio, aplique la etiqueta a la parte para que detecte la.Si lo desea, el nombre de etiqueta que utiliza el módulo se puede cambiar al establecer un valor diferente para tokenTag en una llamada configurar servidor.
Incluye un conjunto de instancias hijo StringValue al "texto de sabor" para mostrar cuando se ingresa la región.
Configuración
El módulo está preconfigurado para trabajar en la mayoría de los casos de uso, pero se puede personalizar fácilmente.Por ejemplo, para cambiar la velocidad de rotación de tokens y personalizar el mensaje de información modal:
En StarterPlayerScripts , crea una nueva LocalScript y renombrala a ConfigurarCazaDeTesoros .
Pega el siguiente código en el nuevo script.
LocalScript - ConfigurarCazaDeTesoroslocal 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,})
Eventos de recolección
Cada vez que un jugador recoge una token o entra en una región, se activa el evento recogido.Puedes escuchar este evento desde un lado del servidor Script y responder de acuerdo.La función conectada recibe el Player que colisionó con la token o entró en la región y ese nombre de token o región.
Del mismo modo, cuando un jugador recoge todas las fichas o entra en todas las regiones etiquetadas, se activa el evento todas recogidas y la función conectada recibe el asociado Player.Esta función solo se activa una vez por jugador y se puede usar para recompensar a ese jugador con una insignia mala, acceso a una nueva área, moneda en experiencia , etc.
Guión
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)
Interfaz Interfaz gráfica (o GUI)
Este módulo explica varias opciones para personalizar su interfaz de usuario predeterminada, pero puedes optar por mostrar elementos de interfaz de usuario personalizados en su lugar.
Cuando useCustomModals se establece en true en la función configurarClient, el evento showInfoModal se activa cada vez que el jugador activa el rastreador de tokens.Del mismo modo, el evento showCompleteModal se activa cuando el jugador ha recogido todo en la búsqueda del tesoro.Ambos eventos se pueden escuchar en un LocalScript .
Guión local
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Mostrar un modal de información personalizado
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Mostrar un modal completo personalizado
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Visibilidad de la GUI
Por defecto, la búsqueda del tesoro oculta todos los ScreenGuis y CoreGuis (excepto la lista de jugadores) cuando aparece el modal de información o el modal de finalización.Si quieres anular este comportamiento de ocultamiento automático y decidir programáticamente qué interfaces de usuario deben permanecer visibles, incluye los hideOtherGuis y showOtherGuis llamados de devolución y responde con tu propia lógica personalizada.
Guión 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 = {}
-- Crear una interfaz gráfica de usuario de pantalla que no se ocultará
local specialGuiInstance = Instance.new("ScreenGui")
-- Dibuja la interfaz de usuario de la pantalla por encima de la interfaz de usuario de la búsqueda del tesoro
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Añadir etiqueta de texto a la interfaz Interfaz gráfica (o 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()
-- Ocultar todas las interfaces de usuario definidas por el desarrollador
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
-- Ocultar interfaces de núcleo específicas
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Mostrar todas las interfaces de usuario definidas por el desarrollador que se ocultaron
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Mostrar interfaces de núcleo específicas que estaban ocultas
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Referencia de API
Funciones
配置客户端 (configurar cliente)
configurarCliente(config: table )
Anula las opciones de configuración predeterminadas del lado del cliente a través de las siguientes claves/valores en la tabla config.Esta función solo se puede llamar desde un LocalScript .
Clave | Descripción | Por defecto |
---|---|---|
autoDismissTime | Tiempo en segundos antes de que el modal se rechace automáticamente a sí mismo o se navegue a la siguiente página si hay una. Establecer a 0 para desactivar. | 20 |
closeModalGamepad | Botón de gamepad usado para cerrar modalidades (Enum.KeyCode). | ButtonA |
closeModalKeyboard | Tecla del teclado utilizada para cerrar modalidades (Enum.KeyCode). | E |
completeModalText | Texto para mostrar en la ventana modal que aparece después de hacer clic en el rastreador de tokens cuando la búsqueda del tesoro esté completa. | «¡Gracias por participar!» |
infoModalText | Texto para mostrar en la ventana modal que aparece después de hacer clic en el rastreador de tokens. | “Encuentra todos los tokens para completar la búsqueda” |
tokenRotationSpeed | Velocidad a la que rotarlos tokens, en grados por segundo. Establecer a 0 para evitar la rotación. | 20 |
nextArrowImage | Imagen utilizada para indicar que hay más páginas modales para mostrar después de la página modal actual. | “rbxassetid://8167172095” |
openTokenTrackerGamepad | Botón de gamepad utilizado para mostrar las modalidades que aparecen después de activar el rastreador de tokens (Enum.KeyCode). | ButtonY |
openTokenTrackerKeyboard | Tecla del teclado utilizada para mostrar los modales que aparecen después de activar el rastreador de tokens ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Imagen para el botón del gamepad que se usa para activar el rastreador de tokens. | “rbxassetid://8025860488” |
regionIcon | Icono para mostrar junto al rastreador de tokens al ingresar a regiones. | “rbxassetid://8073794624” |
tokenIcon | Icono para mostrar junto al rastreador de tokens al recopilar tokens. | “rbxassetid://8073794477” |
tokenTrackerPositionSmallDevice | Posición de la interfaz de usuario del rastreador de tokens en pequeños dispositivos como teléfonos (UDim2). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Posición de la interfaz de usuario del rastreador de tokens en dispositivos más grandes como tabletas y PC (UDim2). | (1, 0, 1, -16) |
useRegions | En lugar de tokens, utilice regiones. | falso |
Guión 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},})
configurarServidor
configurarServidor(config: table )
Anula las opciones de configuración predeterminadas del lado del servidor a través de las siguientes claves/valores en la tabla config.Esta función solo se puede llamar desde un Script .
Clave | Descripción | Por defecto |
---|---|---|
tokenTag | Etiqueta utilizada por CollectionService para encontrar todos los tokens o regiones utilizados en la búsqueda del tesoro. | “ScavengerHuntPart” |
datastoreName | Nombre del DataStore utilizado por la búsqueda de tesoros para almacenar el progreso de la colección de cada jugador. | “Fichas de caza de tesoros” |
resetOnPlayerRemoving | Si es verdad, restablece el progreso del usuario cuando sale de la experiencia; conveniente para no guardar el progreso mientras se prueba la búsqueda del tesoro. | falso |
Guión
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
desactivar
desactivar()
Oculta toda la interfaz de usuario para la búsqueda del tesoro, desconecta todos los oyentes de eventos de entrada y evita que los jugadores recojan fichas o interactúen con regiones.Esta función solo se puede llamar desde un Script .
Guión
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
activar
activar()
Muestra toda la interfaz de usuario para la búsqueda del tesoro, conecta todos los oyentes de eventos de entrada y permite que los jugadores recojan tokens y interactúen con regiones.Esta función solo se puede llamar desde un Script .
Guión
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Eventos
recogido
Se activa cuando un jugador colisiona con una token o entra en una región.La función conectada recibirá el Player que colisionó con la token o entró en la región y el nombre de la token que se colisionó o la región que se ingresó.Este evento solo se puede conectar en un Script .
Parámetros | |
---|---|
jugador: Player | Usuario que se colisionó con una token o ingresó a una región. |
itemName: string | Nombre del token que se chocó o la región que se ingresó. |
totalRecogido: number | Total de tokens recogidos por el usuario representado por player . |
Guión
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)
todosRecogidos
Se enciende cuando un jugador recoge todas las fichas o ingresa a todas las regiones en la búsqueda del tesoro.La función conectada recibirá el Player que recolectó todos los tokens, y solo se disparará una vez por jugador.Este evento solo se puede conectar en un Script .
Parámetros | |
---|---|
jugador: Player | Jugador que recogió todas las fichas o entró en todas las regiones. |
Guión
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
mostrarInfoModal
Se activa cuando el jugador hace clic en el rastreador de tokens cuando la opción Configuración está establecida en verdadero.Este evento solo se puede conectar en un LocalScript .
Guión 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)
mostrarModal completo
Se enciende cuando el jugador hace clic en el rastreador de tokens cuando la opción Configuración está establecida en y el jugador ha recopilado todas las fichas en la búsqueda del tesoro.Este evento solo se puede conectar en un LocalScript .
Guión 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)
Devoluciones de llamada
esconderOtherGuis
hideOtherGuis(devolución de llamada: function )
Esta llamada de devolución se ejecuta inmediatamente antes de que se muestre un modal, permitiéndote deshabilitar todo el ScreenGuis o elementos dentro de ellos antes de que se muestre el modal.Vea Visibilidad de la interfaz gráfica para detalles y código de muestra.
mostrarOtherGuis
showOtherGuis(devolución de llamada: function )
Esta llamada de devolución se ejecuta inmediatamente después de que se haya descartado un modal, permitiéndote habilitar todo ScreenGuis o elementos dentro de ellos.Vea Visibilidad de la interfaz gráfica para detalles y código de muestra.