O ScavengerHunt módulo de desenvolvedores dá aos jogadores uma maneira intrinsicamente gamificada de explorar sua experiência, introduzindo-os ao local inteiro. O progresso do jogador é persistente, para que as caças ao tesouro possam continuar em sessões.
Uso de Módulo
Instalação
Para usar o módulo ScavengerHunt em uma experiência:
Na aba Ver, abra a caixa de ferramentas e selecione a aba Loja do Criador.
Certifique-se de que a classificação Modelos foi selecionada, então clique no botão Ver Todos para Categorias .
Localize e clique no mosaico Modulos de Desenvolvedor .
Localize o módulo Caça ao tesouro e clique nele, ou arraste e solte na janela de ver3D.
Na janela Explorer, mova o modelo completo de ScavengerHunt para ServerScriptService . Ao executar a experiência, o módulo será distribuído para vários serviços e começará a funcionar.
Usando Tokens
O módulo de caça ao tesouro usa tokens como os itens que os jogadores procuram e coletam. O módulo vem com um modelo de token que você pode colocar no mundo 3D.
Localize a Token1 malha dentro da pasta Espaço de Trabalho do diretório principal do módulo.
Mova Token1 para a hierarquia de nível superior da Workspace e coloque-o onde desejar.
Dê ao token um nome único ; este nome é como o módulo rastreia quais tokens cada jogador coletou.
Para adicionar mais tokens, duplica um token existente e dá-lhe um nome único.
Se você não quiser usar os tokens de malha incluídos, qualquer Model ou BasePart funcionará, desde que ele atenda aos seguintes critérios:
O objeto tem uma etiqueta CollectionService de ScavengerHuntPart. Se desejar, o nome da etiqueta CollectionService que o módulo utiliza pode ser alterado ao definir um valor diferente para 1> tokenTag1> em uma chamada 4>ConfigurarServidor4>.
Objeto contém uma instância filha StringValue definida para o "flavor text" para exibir quando o token é coletado.
Usando Regiões
Regiões diferem um pouco de tokens, como grandes áreas que estão marcadas como "coletadas" uma vez que o jogador entra nelas. Além disso, quando um jogador sai da região, o texto de sabor é automaticamente rejeitado e a região em si é removida do espaço de trabalho.
Crie uma peça ancorada ao redor da região, como um bloco ou uma esfera. O módulo desativará automaticamente a propriedade CanCollide no tempo de execução para que os jogadores não colissem fisicamente com a região.
Dê a ele um nome único . Este nome é como o módulo rastreia quais regiões cada jogador entrou.
Usando a seção Tags das propriedades da peça ou do Editor de Tags do Studio, aplique a etiqueta ScavengerHuntPart à peça para que o 1> Class.CollectionService1> detecte. Se desejar, o nome da etiqueta que o módulo utiliza pode ser alterado definindo um
Inclua uma instância filha StringValue para exibir quando a região for inserida.
Configuração
O módulo está predefinido para funcionar para a maioria dos casos de uso, mas pode ser facilmente personalizado. Por exemplo, para alterar a velocidade de rotação do token e personalizar a mensagem de informações modais:
In StarterPlayerScripts , create a new LocalScript and rename it to ConfigureScavengerHunt .
Paste o seguinte código no novo script.
LocalScript - ConfigureScavengerHuntlocal 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 Coleção
Cada vez que um jogador coleta um token ou entra em uma região, o evento coletado é acionado. Você pode ouvir este evento do lado do servidor Script e responder de acordo. A função conectada recebe o Player que colidiu com o token ou entrou na região e que token ou região de nome.
Da mesma forma, quando um jogador coleta todos os tokens ou entra em todas as regiões marcadas, o evento todosColetados é acionado e a função conectada recebe o associado 1> Class.Player1>. Essa função só é acionada uma vez por jogador e pode ser usada para recompensar aque
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 gráfica do usuárioPersonalizado
Este módulo exibe várias opções para personalizar seu Interface gráfica do usuáriopadrão, mas você pode optar por exibir elementos de GUI personalizados em vez disso.
Quando useCustomModals é definido para true na função ConfigurarCliente, o evento 1> showInfoModal1> é acionado sempre que o jogador ativa o rastreador de tokens. Da mesma forma, o evento 4> showCompleteModal4> é acionado quando o jogador co
Script Local
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- Exibir um modais de informação personalizado
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- Mostrar uma moda completa personalizada
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)
Visibilidade GUI
Por padrão, a caça ao tesouro oculta todos os ScreenGuis e CoreGuis ( exceto para a lista de jogadores) quando o modo de informação ou modo de conclusão aparece. Se você quiser sobrescrever esse comportamento de auto-esconder e programar o comportamento de
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 = {}
-- Crie uma GUI de tela que não será escondida
local specialGuiInstance = Instance.new("ScreenGui")
-- Desenhe a GUI da tela acima da Interface gráfica do usuáriode caça ao tesouro
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- Adicionar rótulo de texto à Interface gráfica do usuário
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 todos os GUIs de tela definidos pelo desenvolvedor
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 GUI do núcleo específico
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- Mostrar todas as GUI de tela definidas pelo desenvolvedor que estavam ocultas
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- Mostrar GUIs de núcleo específicos que estavam ocultos
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
Referência da API
Funções
ConfigurarCliente
Substitui as opções de configuração padrão do lado do cliente através das seguintes chaves/valores na tabela config. Essa função só pode ser chamada de um LocalScript .
Chave | Descrição | Padrão |
---|---|---|
autoDismissTime | Tempo em segundos antes que o modais seja automaticamente descartado ou navegue para a próxima página se houver uma. Definido como 0 para desabilitar. | 20 |
closeModalGamepad | Botão do Gamepad usado para fechar modais ( Enum.KeyCode ). | ButtonA |
closeModalKeyboard | Tecla do teclado usada para fechar modais ( Enum.KeyCode ). | E |
completeModalText | Texto para mostrar na janela pop-up que aparece depois de clicar no rastreador de tokens quando a caça ao tesouro estiver completa. | “Obrigado por participar!” |
infoModalText | Texto para mostrar na janela modal que aparece depois de clicar no rastreador de tokens. | “Encontre todos os tokens para completar a caça” |
tokenRotationSpeed | Velocidade em que os tokens girar, em graus por segundo. Definir para 0 para impedir a rotação. | 20 |
nextArrowImage | Imagem usada para indicar que há mais páginas modais para mostrar depois da página modular atual. | “rbxassetid://8167172095” |
openTokenTrackerGamepad | Botão do gamepad usado para mostrar os modais que aparecem após a ativação do token tracker ( Enum.KeyCode ). | ButtonY |
openTokenTrackerKeyboard | Tecla do teclado usada para mostrar os modais que aparecem após a ativação do rastreador de tokens ( Enum.KeyCode ). | Y |
openTokenTrackerGamepadButtonImage | Imagem para o botão do gamepad que é usado para ativar o token tracker. | “rbxassetid://8025860488” |
regionIcon | Ícone para exibir ao lado do rastreador de tokens ao entrar em regiões. | “rbxassetid://8073794624” |
tokenIcon | Ícone para exibir ao lado do rastreador de tokens ao coletar tokens. | “rbxassetid://8073794477” |
tokenTrackerPositionSmallDevice | Posição do token tracker UI em pequenos dispositivos, como telefones ( UDim2 ). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Posição do rastreador de tokens na interface do usuário de maior tamanho, como tablets e PC (UDim2). | (1, 0, 1, -16) |
useRegions | Em vez de tokens, use regiões. | falso |
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},})
Configurar o Servidor
Substitui as opções de configuração padrão do lado do servidor através das seguintes chaves/valores na tabela config. Essa função só pode ser chamada de um Script .
Chave | Descrição | Padrão |
---|---|---|
tokenTag | Tag usado por CollectionService para encontrar todos os tokens ou regiões usados na caça ao tesouro. | “ScavengerHuntPart” |
datastoreName | Nome do DataStore usado pela caça ao tesouro para armazenar o progresso da coleção de cada jogador. | “ScavengerHuntTokens” |
resetOnPlayerRemoving | Se for verdadeiro, redefine o progresso do usuário quando eles saem da experiência; conveniente para não salvar o progresso ao testar a caça ao tesouro. | falso |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
desabilitar
Oculta toda a UI para a caça ao tesouro, desconecta todos os ouvidos de entrada e impede que os jogadores coletem tokens ou interajam com regiões. Essa função só pode ser chamada de um Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
habilitar
Mostra toda a UI para a caça ao tesouro, conecta todos os ouvintes de eventos de entrada e permite que os jogadores coletem tokens e interajam com regiões. Essa função só pode ser chamada de um Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Eventos
coletado
Dispara quando um jogador colide com um token ou entra em uma região. A função conectada receberá o Player que colidiu com o token ou entrou na região e o nome do token que foi colidido. Este evento só pode ser conectado em um Script .
Parâmetros | |
---|---|
jogador: Player | Usuário que colidiu com um token ou entrou em uma região. |
itemName: string | Nome do token que foi colidido ou a região que foi inserida. |
TotalColetado: number | Total de moedas coletadas pelo usuário representado por 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)
todosColetados
Dispara quando um jogador coleta todos os tokens ou entra em todas as regiões na caça ao tesouro. A função conectada receberá o Player que coletou todos os tokens, e só será executado uma vez por jogador. Este evento só pode ser conectado em um Script .
Parâmetros | |
---|---|
jogador: Player | Jogador que coletou todos os tokens ou entrou em todas as regiões. |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)
Mostrar Info Modal
Ocorre quando o jogador clica no rastreador de tokens quando a opção useCustomModalsclass.localScript está definida como verdadeira. Este evento só pode ser conectado em um 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)
MostrarCompletoModo
Ocorre quando o jogador clica no rastreador de tokens quando a opção useCustomModals配置 está definida como true e o jogador coletou todos os tokens na caça ao tesouro. Este evento só pode ser conectado em um 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)
Chamadas
esconderOutrosGuis
Este retorno de chamada é executado imediatamente antes de uma janela modal ser exibida, permitindo que você desative todos os elementos dentro dela antes que a janela modal seja exibida. Veja ScreenGuis para detalhes e código de exemplo.
MostrarOutrosGuis
Este retorno de chamada é executado imediatamente após uma janela moda ser descartada, permitindo que você ative todo ScreenGuis ou elementos dentro deles. Veja Visibilidade GUI para detalhes e código de exemplo.