Cabine de fotos

Tirar uma foto é uma maneira perfeita de comemorar uma ótima experiência. O módulo de desenvolvedor PhotoBooth é uma ferramenta de preparo de fotos fácil de usar que permite que os jogadores atinjam um cargo único com um plano de fundo que representa sua experiência.

Uso do módulo

Instalação

Para usar o módulo PhotoBooth em uma experiência:

  1. Na aba Exibir, abra a Caixa de ferramentas e selecione a aba Mercado.

    Botão de ativação da Caixa de ferramentas no Studio.
  2. Verifique se a ordenação de Modelos está selecionada e, em seguida, clique no botão Exibir Tudo para Categorias.

  3. Encontre e clique no painel DEV MODULES

  4. Localize o módulo Cabine de fotos e clique nele, ou arraste-o e solte-o em uma visualização 3D.

  5. Na janela do Explorador, mova o modelo PhotoBooth inteiro 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.

Posicionando a cabine

O módulo vem com um modelo PhotoBooth que você pode posicionar no mundo 3D. Esse modelo é o objeto com o qual os jogadores interagirão para configurar uma foto.

  1. Localize a malha PhotoBooth dentro da pasta Espaço de trabalho da pasta principal do módulo.

  2. Mova-a para a hierarquia mais alta do Espaço de trabalho e posicione-a onde desejar.

Configuração

O módulo é pré-configurado para funcionar na maioria dos casos de uso, mas pode ser facilmente personalizado por meio da função configurar. Por exemplo, para alterar a mensagem padrão na parte inferior da foto:

  1. Em StarterPlayerScripts, crie um novo Class. LocalScript e renomeie-o para ConfigurePhotoBooth.

  2. Cole o seguinte código dentro do script novo.

    LocalScript - ConfigurePhotoBooth

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
    PhotoBooth.configure({
    frameMessage = "First Photo Booth Capture!",
    })

Conexão com eventos

Toda vez que a cabine de fotos exibir uma nova tela para um cliente local, um evento correspondente será acionado. Esses eventos podem ser conectados em um Class. LocalScript para que você possa responder com sua própria lógica personalizada.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.countdownStarted:Connect(function()
print("The countdown has started")
end)
PhotoBooth.printoutShown:Connect(function()
print("The printout is showing")
end)
PhotoBooth.promptShown:Connect(function()
print("The camera prompt is showing")
end)

Visibilidade da interface gráfica

Por padrão, a cabine de fotos esconde todos os Class. ScreenGui|ScreenGuis e Class. CoreGui|CoreGuis quando a foto é tirada. 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 PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
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 photo booth GUI
specialGuiInstance. DisplayOrder = 1
specialGuiInstance. Parent = playerGui
-- Set attribute on screen GUI to prevent hiding
specialGuiInstance:SetAttribute("ShowInPhotoBooth", true)
-- Add text label to the GUI
local specialLabel = Instance.new("TextLabel")
specialLabel. Size = UDim2.fromScale(1, 0.1)
specialLabel. Text = "Remains visible when taking a photo"
specialLabel. Font = Enum. Font. GothamMedium
specialLabel. TextSize = 24
specialLabel. Parent = specialGuiInstance PhotoBooth.hideOtherGuis(function()
-- Hide all developer-defined screen GUIs except those marked with attribute
local instances = playerGui:GetChildren()
for _, instance in pairs(instances) do
if instance:IsA("ScreenGui") and not instance:GetAttribute("ShowInPhotoBooth") and instance. Enabled then
instance. Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- Hide specific core GUIs
StarterGui:SetCoreGuiEnabled(Enum. CoreGuiType. PlayerList, false)
end)
PhotoBooth.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

configurar

configure(config:table):nil

Substitui as opções de configuração padrão por meio das chaves-valor na tabela config. Esta função só poder ser chamada de um Class. LocalScript.

Aparência

ChaveDescriçãoPadrão
frameMessageMensagem que é mostrada na parte inferior da foto. Sua duração pode ser controlada por meio da propriedade fadeUiDelay."Use seu dispositivo para capturar a tela e compartilhar!"
fadeUiDelayTempo para mostrar a mensagem do quadro antes de desaparecer, em segundos. Defina como um número negativo para que nunca desapareça.3
closeButtonImageImagem a ser usada para o botão de fechar a foto, colocada sobre a imagem closeButtonBackgroundImage."rbxassetid://7027440823"
closeButtonBackgroundImageImagem de fundo a ser usada para o botão de fechar a foto."rbxassetid://7027440891"
cameraLandscapePositionDistância da câmera da cabine de fotos, na frente e para cima do personagem, ao tirar uma foto no modo paisagem (Datatype. Vector2).(5, 2)
cameraPortraitPositionDistância da câmera da cabine de fotos, na frente e para cima do personagem, ao tirar uma foto no modo retrato (Datatype. Vector2).(10, 1)
countdownFontFonte a ser usada para os números na contagem regressiva (Enum. Font).GothamBlack
countdownTextColorCor dos números na contagem regressiva (Datatype. Color3).[255, 255, 255]
printoutCharacterPositionPosição do personagem na tela quando a impressão estiver sendo mostrada (UDim2).(0.5, 0, 0.5, 0)
printoutCharacterSizeQuantidade de espaço na tela que o personagem ocupa na impressão (UDim2).(1, 0, 1, 0)
characterAnimationID de ativo da animação que o personagem faz na foto, pausada em seu quadro inicial."rbxassetid://6899663224"
filterImageImagem a ser aplicada sobre a foto como um filtro. Se nil, um filtro padrão que ofusca as bordas da imagem será usado.nil

Comportamento

ChaveDescriçãoPadrão
maxActivationDistanceDistância máxima, em rebites, que o personagem de um jogador pode estar da cabine de fotos para que o aviso apareça.10
countdownBeepSoundID de ativo do Class. Sound a ser reproduzido para cada número mostrado na contagem regressiva."rbxassetid://7743999789"
countdownFlashSoundID de ativo para o Class. Sound a ser reproduzido quando o efeito de flash for mostrado."rbxassetid://7744000850"
countdownSecondsNúmero de segundos para a contagem regressiva.3

Outros

ChaveDescriçãoPadrão
photoboothTagMarcador usado por Class. CollectionService para encontrar todas as “cabines” no local."PhotoBooth"
LocalScript - ConfigurePhotoBooth

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.configure({
frameMessage = "What a cool pose!",
fadeUiDelay = 5,
maxActivationDistance = 5,
printoutCharacterSize = UDim2.fromScale(1.5, 1.5),
})

setBackgrounds

setBackgrounds(backgrounds:table):nil

Substitui os fundos padrão fornecidos pela cabine de fotos. As imagens de fundo devem estar na proporção de 16:9 (1024×768) para uma experiência ideal e seus IDs de ativo devem ser incluídos na matriz de fundos. 1–4 (inclusivos) fundos podem ser fornecidos.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.setBackgrounds({
"rbxassetid://7018713114",
"rbxassetid://950538356",
})

Eventos

countdownStarted

countdownStarted(): RBXScriptSignal

É acionado quando a contagem regressiva começa. O evento só pode ser conectado a um Class. LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.countdownStarted:Connect(function()
print("The countdown has started")
end)

printoutShown

printoutShown(): RBXScriptSignal

É acionado quando a impressão é mostrada ao usuário. O evento só pode ser conectado a um Class. LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.printoutShown:Connect(function()
print("The printout is showing")
end)

promptShown

promptShown(): RBXScriptSignal

É acionado quando a impressão é fechada e o botão da câmera é exibido novamente. O evento só pode ser conectado a um Class. LocalScript.

LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage:WaitForChild("PhotoBooth"))
PhotoBooth.promptShown:Connect(function()
print("The camera prompt is showing")
end)

Retornos de chamada

hideOtherGuis

hideOtherGuis(callback:function)

Esse retorno de chamada é executado imediatamente antes de a impressão ser exibida, permitindo que você desabilite Class. ScreenGui|ScreenGuis por completo ou elementos de dentro antes que a impressão seja mostrada. As interfaces gráficas usadas pela cabine de fotos têm o atributo ShowInPhotoBooth definido como true. Consulte Visibilidade da interface gráfica para obter detalhes e códigos de exemplo.

showOtherGuis

showOtherGuis(callback:function)

Esse retorno de chamada é exibido após o fechamento da impressão, permitindo que você reative Class. ScreenGui|ScreenGuis por completo ou elementos de dentro. As interfaces gráficas usadas pela cabine de fotos têm o atributo ShowInPhotoBooth definido como true. Consulte Visibilidade da interface gráfica para obter detalhes e códigos de exemplo.