O módulo de desenvolvedores ScavengerHunt dá aos jogadores uma maneira inerentemente jogabilizada de explorar sua experiência, apresentando-a organicamente para todo o local. O progresso do jogador é persistente, então as caçadas ao tesouro podem continuar entre as sessões.
Uso do módulo
Instalação
Para usar o módulo ScavengerHunt em uma experiência:
Na aba Exibir, abra a Caixa de ferramentas e selecione a aba Mercado.
Verifique se a ordenação de Modelos está selecionada e, em seguida, clique no botão Exibir Tudo para Categorias.
Encontre e clique no painel DEV MODULES
Localize o módulo Caça ao tesouro e clique nele ou o arraste e solte na visualização 3D.
Na janela do Explorador, mova todo o modelo ScavengerHunt para o ServerScriptService. Ao executar a experiência, o módulo será distribuído para vários serviços e começará a ser executado.
Usando tokens
O módulo de caça ao tesouro usa tokens como itens que os jogadores procuram e coletam. O módulo vem com um modelo de token que você pode posicionar no mundo 3D.
Localize a malha Token1 dentro da pasta Espaço de trabalho da pasta principal do módulo.
Mova o Token1 para a hierarquia mais alta do Espaço de trabalho e posicione-o onde desejar.
Dê ao token um nome exclusivo; esse nome é como o módulo rastreia quais tokens cada jogador já coletou.
Para adicionar mais tokens, duplique um token existente e dê a ele um nome exclusivo.
Se você não quiser usar os tokens de malha do pacote, qualquer Class. Model ou Class. BasePart funcionará, contanto que atenda aos seguintes critérios:
- O objeto tem um marcador Class. CollectionService de ScavengerHuntPart. Se desejar, o nome do marcador que o módulo utiliza pode ser alterado através da configuração de um valor diferente para tokenTag em uma chamada configureServer.
- O objeto contém uma instância filho Class. StringValue definida como o “texto identificador” a ser exibido quando o token é coletado.
Usando regiões
As regiões diferem ligeiramente dos tokens, como grandes áreas que são marcadas como “coletadas” assim que o jogador entra nelas. Além disso, quando um jogador deixa a região, o modal do texto identificador é automaticamente descartado e a própria região é removida do espaço de trabalho.
Crie uma parte ancorada em torno da região, como um bloco ou esfera. O módulo desabilitará automaticamente a propriedade Class. BasePart. CanCollide|CanCollide no tempo de exposição para que os jogadores não colidam fisicamente com a região.
Dê a ela um nome exclusivo. Esse nome é como o módulo rastreia em quais regiões cada jogador entrou.
Atribua à parte um marcador Class. CollectionService de ScavengerHuntPart. Se desejar, o nome do marcador que o módulo utiliza pode ser alterado através da configuração de um valor diferente para tokenTag em uma chamada configureServer.
Inclua uma instância filho Class. StringValue definida como o “texto identificador” a ser exibido quando a região é inserida.
Configuração
O módulo é pré-configurado para funcionar na 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ção do modal:
Em StarterPlayerScripts, crie um novo Class. LocalScript e renomeie-o para ConfigureScavengerHunt.
Cole o seguinte código dentro do script novo.
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
Toda vez que um jogador coleta um token ou entra em uma região, o evento collected é acionado. Você pode captar esse evento do Class. Script do lado do servidor e responder de acordo. A função conectada recebe o Class. Player que colidiu com o token ou entrou na região e o nome desse token ou dessa região.
Da mesma forma, quando um jogador coleta todos os tokens ou entra em todas as regiões marcadas, o evento allCollected é acionado e a função conectada recebe o Class. Player associado. Essa função só é acionada uma vez por jogador e pode ser usada para recompensar esse jogador com um emblema, acesso a uma nova área, moeda da experiência etc.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player. DisplayName ..
" completed the hunt!")
end)
Interface gráfica personalizada
Este módulo expõe várias opções para personalizar sua interface gráfica padrão, mas você também pode optar por exibir elementos personalizados de interface gráfica.
Quando useCustomModals é definido como true na função configureClient, o evento showInfoModal é acionado toda vez que o jogador ativa o rastreador de token. Da mesma forma, o evento showCompleteModal é acionado quando o jogador coletou tudo na caça ao tesouro. Ambos os eventos podem ser captados em um Class. LocalScript.
LocalScript
→
Visibilidade da interface gráfica
Por padrão, a caça ao tesouro esconde todos os Class. ScreenGui|ScreenGuis e Class. CoreGui|CoreGuis (exceto para a lista de jogadores) quando o modal de informação ou o modal de conclusão aparece. Se você quiser substituir esse comportamento de ocultação automática e decidir programaticamente quais interfaces gráficas devem permanecer visíveis, inclua os retornos de chamada hideOtherGuis e showOtherGuis e responda com sua própria lógica personalizada.
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.
Referência de API
Funções
configureClient
configureClient(config:table):nil
Substitui as opções de configuração padrão do cliente por meio das seguintes chaves-valores na tabela config. Esta função só poder ser chamada de um Class. LocalScript.
Geral
Chave | Descrição | Padrão |
---|---|---|
autoDismissTime | Tempo em segundos antes que o modal desapareça automaticamente ou navegue para a próxima página, se houver. Defina como 0 para desabilitar. | 20 |
closeModalGamepad | Botão do controle usado para fechar modais (Enum. KeyCode). | ButtonA |
closeModalKeyboard | Tecla do teclado usada para fechar modais (Enum. KeyCode). | E |
completeModalText | Texto a ser exibido no modal que aparece depois de clicar no rastreador de token quando a caça ao tesouro é concluída. | "Obrigado por participar!" |
infoModalText | Texto a ser exibido no modal que aparece depois de clicar no rastreador de token. | "Encontre todos os tokens para completar a caça" |
tokenRotationSpeed | Velocidade em que os tokens giram, em graus por segundo. Defina como 0 para evitar a rotação. | 20 |
nextArrowImage | Imagem usada para indicar que há mais páginas modais a serem exibidas após a página modal atual. | "rbxassetid://8167172095" |
openTokenTrackerGamepad | Botão do controle usado para mostrar os modais que aparecem depois de ativar o rastreador de tokens (Enum. KeyCode). | ButtonY |
openTokenTrackerKeyboard | Tecla do teclado usada para mostrar os modais que aparecem depois de ativar o rastreador de tokens (Enum. KeyCode). | Y |
openTokenTrackerGamepadButtonImage | Imagem para o botão do controle que é usado para ativar o rastreador de tokens. | "rbxassetid://8025860488" |
regionIcon | Ícone a ser exibido ao lado do rastreador de tokens ao entrar em regiões. | "rbxassetid://8073794624" |
tokenIcon | Ícone a ser exibido ao lado do rastreador de tokens ao coletar tokens. | "rbxassetid://8073794477" |
tokenTrackerPositionSmallDevice | Posição da IU do rastreador de tokens em dispositivos pequenos, como telefones (UDim2). | (1, 0, 0, 84) |
tokenTrackerPositionLargeDevice | Posição da IU do rastreador de tokens em dispositivos maiores, como tablets e PC (UDim2). | (1, 0, 1, -16) |
useRegions | Em vez de tokens, use regiões. | false |
Modais
Chave | Descrição | Padrão |
---|---|---|
modal.backgroundColor | Cor de fundo dos modais (Datatype. Color3). | [0, 0, 0] |
modal.font | Fonte do texto que aparece em um modal (Enum. Font). | GothamMedium |
modal.textColor | Cor do texto que aparece em um modal (Datatype. Color3). | [255, 255, 255] |
modal.textSize | Tamanho do texto que aparece em um modal. | 16 |
useCustomModals | Quando marcado como verdadeiro, os modais padrão não são exibidos. Isso permite que você mostre modais personalizados, conforme descrito em Interface gráfica personalizada. | false |
useCustomTokenTracker | Quando marcado como verdadeiro, o rastreador de tokens padrão não é exibido. Isso permite que você mostre uma interface gráfica de rastreador de tokens personalizada como alternativa. | false |
Feixe de navegação
Chave | Descrição | Padrão |
---|---|---|
showNavigationBeam | Quando marcado como verdadeiro, um Class. Beam do jogador para o token mais próximo será mostrado. | true |
navigationBeam.color | Datatype. ColorSequence definindo a cor do feixe em seus segmentos. Consulte Class. Beam. Color para obter detalhes. | [255, 255, 255] → [255, 255, 255] |
navigationBeam.curveSize0 | Posição do primeiro ponto de controle na forma de Bézier do feixe. Consulte Class. Beam. CurveSize0 para obter mais informações. | 0 |
navigationBeam.curveSize1 | Posição do segundo ponto de controle na forma de Bézier do feixe. Consulte Class. Beam. CurveSize1 para obter mais informações. | 0 |
navigationBeam.faceCamera | Se os segmentos do feixe estarão ou não sempre voltados para a câmera, independentemente de sua orientação. Consulte Class. Beam. FaceCamera para obter detalhes. | true |
navigationBeam.lightEmission | Grau de mistura das cores do feixe com as cores por trás dele. Consulte Class. Beam. LightEmission para obter detalhes. | 0 |
navigationBeam.lightInfluence | Grau de influência da iluminação do ambiente no feixe. Consulte Class. Beam. LightInfluence para obter detalhes. | 0 |
navigationBeam.segments | Quantos segmentos retos compõem o feixe. | 10 |
navigationBeam.texture | ID de ativo da textura a ser exibida no feixe. | "rbxassetid://8081777495" |
navigationBeam.textureLength | Comprimento da textura do feixe, dependendo da configuração para navigationBeam.textureMode. Consulte Class. Beam. TextureLength para obter detalhes. | 1 |
navigationBeam.textureMode | Maneira pela qual a textura do feixe é dimensionada e repetida (Enum.</td> <td>Wrap` | |
navigationBeam.textureSpeed | Velocidade na qual a imagem da textura se move ao longo do feixe. | 1 |
navigationBeam.transparency | Datatype. NumberSequence definindo a transparência do feixe em seus segmentos. Consulte Class. Beam. Transparency para obter detalhes. | (0, 0) → (0.15, 1) → (1, 1) |
navigationBeam.width0 | Largura do feixe em sua base, em rebites. | 1 |
navigationBeam.width1 | Largura do feixe na sua extremidade, em rebites. | 1 |
navigationBeam.zOffset | Distância, em rebites, pela qual a exibição do feixe é deslocada em relação à câmera. | 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
Substitui as opções de configuração do servidor por meio das seguintes chaves-valor na tabela config. Esta função só poder ser chamada de um Class. Script.
Chave | Descrição | Padrão |
---|---|---|
tokenTag | Marcador usado por Class. CollectionService para encontrar todos os tokens ou regiões usadas na caça ao tesouro. | "ScavengerHuntPart" |
datastoreName | Nome do Class. DataStore usado pela caça ao tesouro para armazenar o progresso da coleção de cada jogador. | "ScavengerHuntTokens" |
resetOnPlayerRemoving | Quando marcado como verdadeiro, redefine o progresso do usuário quando ele sai da experiência; conveniente para não salvar o progresso enquanto a caça ao tesouro é testada. | false |
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.configureServer({tokenTag = "GreenGem",})
disable
disable():nil
Esconde toda a IU da caça ao tesouro, desconecta todos os ouvintes de eventos de entrada e impede que os jogadores de coletem tokens ou interajam com regiões. Esta função só poder ser chamada de um Class. Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.disable()
enable
enable():nil
Mostra toda a IU da caça ao tesouro, conecta todos os ouvintes de eventos de entrada e permite que os jogadores coletem tokens e interajam com regiões. Esta função só poder ser chamada de um Class. Script.
Script
local ReplicatedStorage = game:GetService("ReplicatedStorage")local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))ScavengerHunt.enable()
Eventos
collected
collected(player:Class. Player, itemName:string, totalCollected:number): RBXScriptSignal
É acionado quando um jogador colide com um token ou entra em uma região. A função conectada receberá Player que colidiu com o token ou entrou na região e o nome do token que foi colidido ou a região que foi entrada. O evento só pode ser conectado a um Class. Script.
Parâmetros | |
---|---|
jogador: Class. Player | Usuário que colidiu com um token ou entrou em uma região. |
itemName: string | Nome do token que recebeu a colisão ou da região que foi acessada. |
totalCollected: number | Número total de tokens coletados pelo usuário, representado por player. |
Script
Caça ao tesouro
allCollected
allCollected(player:Class. Player): RBXScriptSignal
É acionado 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 Class. Player que coletou todos os tokens e só é acionada uma vez por jogador. O evento só pode ser conectado a um Class. Script.
Parâmetros | |
---|---|
jogador: Class. 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.collected:Connect(function(player, itemName)
print(player. " completed the hunt!")
end)
end)
showInfoModal
showInfoModal(): RBXScriptSignal
É acionado quando o jogador clica no rastreador de tokens enquanto a opção de configuração useCustomModals está definida como verdadeira. O evento só pode ser conectado a um Class. LocalScript.
LocalScript
→
showCompleteModal
showCompleteModal(): RBXScriptSignal
É acionado quando o jogador clica no rastreador de tokens enquanto a opção de configuração useCustomModals está definida como true e o jogador já coletou todos os tokens na caça ao tesouro. O evento só pode ser conectado a um Class. LocalScript.
LocalScript
→
Retornos de chamada
hideOtherGuis
hideOtherGuis(callback:function)
Esse retorno de chamada é executado imediatamente antes de um modal ser exibido, permitindo que você desabilite Class. ScreenGui|ScreenGuis por completo ou elementos de dentro antes que o modal seja mostrado. Consulte Visibilidade da interface gráfica para obter detalhes e códigos de exemplo.
showOtherGuis
showOtherGuis(callback:function)
Esse retorno de chamada é exibido imediatamente após um modal ser descartado, permitindo que você habilite Class. ScreenGui|ScreenGuis por completo ou elementos de dentro. Consulte Visibilidade da interface gráfica para obter detalhes e códigos de exemplo.