Cabina de fotos

Tomar una foto es una forma perfecta de conmemorar una gran experiencia. El módulo de desarrolladores de PhotoBooth es una herramienta de puesta en escena de fotos fácil de usar que le permite a los jugadores hacer una pose única con un fondo que representa su experiencia.

Uso del módulo

Instalación

Sigue estos pasos para usar el módulo PhotoBooth en una experiencia:

  1. En la pestaña Ver, abre la Caja de herramientas y selecciona la pestaña Mercado.

    Botón de activación de Caja de herramientas en Studio
  2. Asegúrate de que la clasificación de Modelos esté seleccionada y, a continuación, haz clic en el botón Ver todo para las Categorías.

  3. Busca y haz clic en el mosaico MÓDULOS DE DESARROLLO.

  4. Busca el módulo Cabina de fotos y haz clic en él o arrástralo y suéltalo en la vista 3D.

  5. En la ventana del Explorador, mueve todo el modelo de PhotoBooth a ServerScriptService. Al ejecutar la experiencia, el módulo se distribuirá a varios servicios y comenzará a ejecutarse.

Posicionar la cabina

El módulo viene con un modelo de PhotoBooth que puedes posicionar en el mundo 3D. Este modelo es con lo que los jugadores interactuarán para configurar una foto.

  1. Busca la malla PhotoBooth dentro de la carpeta Workspace de la carpeta principal del módulo.

  2. Muévela a la jerarquía de Workspace de nivel superior y colócala donde desees.

Configuración

El módulo está preconfigurado para funcionar en la mayoría de los casos de uso, pero puede personalizarse fácilmente mediante la función de configuración. Por ejemplo, para cambiar el mensaje predeterminado en la parte inferior de la foto:

  1. En StarterPlayerScripts, crea un nuevo LocalScripty cámbiale el nombre a ConfigureMerchBooth.

  2. Pega el siguiente código en el script nuevo.

    LocalScript - ConfigurePhotoBooth

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

Conexión a eventos

Cada vez que la cabina de fotos muestra una pantalla nueva a un cliente local, se dispara un evento correspondiente. Estos eventos se pueden conectar en un LocalScript para que puedas responder con tu propia 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)

Visibilidad de la GUI

Por defecto, la cabina de fotos oculta todo ScreenGuis y CoreGuis cuando una foto se incorpora. Si deseas anular este comportamiento de ocultación automática y decidir cuáles GUI deberían permanecer visibles, incluye las retrollamadas hideOtherGuis y showOtherGuis, y responde con tu propia 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.CoreGuiType.PlayerList, true)
end)

Referencia API

Funciones

configure

configure(config:table):nil

Reemplaza las opciones de configuración predeterminadas a través de las siguientes claves o valores en la tabla config. A esta función solo se puede acceder desde un LocalScript.

Apariencia

ClaveDescripciónPredeterminado
frameMessageMensaje que se muestra en la parte inferior de la foto. Su duración se puede controlar por medio de la propiedad fadeUiDelay."Use your device to take a screenshot and share!"
fadeUiDelayEs hora de mostrar el mensaje del marco antes de que se desvanezca, en segundos. Establece un número negativo para que nunca se desvanezca.3
closeButtonImageImagen a usar para el botón de la foto de cierre, colocada sobre la imagen closeButtonBackgroundImage."rbxassetid://7027440823"
closeButtonBackgroundImageImagen de fondo que se va a usar para el botón de la foto de cierre."rbxassetid://7027440891"
cameraLandscapePositionDistancia de la cámara de la cabina de fotos, delante y hacia arriba desde el personaje, al tomar una foto en el modo horizontal (Vector2).(5, 2)
cameraPortraitPositionDistancia de la cámara de la cabina de fotos, delante y hacia arriba desde el personaje, al tomar una foto en el modo vertical (Vector2).(10, 1)
countdownFontFuente que se va a usar para los números en la cuenta regresiva (Enum.Font).GothamBlack
countdownTextColorColor de los números en la cuenta regresiva (Color3).[255, 255, 255]
printoutCharacterPositionPosición del personaje en la pantalla cuando la impresión se muestra (UDim2).(0.5, 0, 0.5, 0)
printoutCharacterSizeCantidad de espacio en la pantalla que el personaje ocupa en la impresión (UDim2).(1, 0, 1, 0)
characterAnimationIdentificación del recurso de la animación que el personaje toma en la foto, pausada en su marco inicial."rbxassetid://6899663224"
filterImageImagen que se va a aplicar sobre la foto como filtro. Si nil, se usará un filtro predeterminado que oscurece los bordes de la imagen.nil

Comportamiento

ClaveDescripciónPredeterminado
maxActivationDistanceDistancia máxima, en studs, que el personaje de un jugador puede estar desde la cabina de fotos para que aparezca el mensaje.10
countdownBeepSoundIdentificación del recurso del Sound que se va a jugar para cada número que se muestra en la cuenta regresiva."rbxassetid://7743999789"
countdownFlashSoundIdentificación del recurso del Sound para jugar cuando el efecto flash se muestre."rbxassetid://7744000850"
countdownSecondsNúmero de segundos que se debe contar regresivamente.3

Otros

ClaveDescripciónPredeterminado
photoboothTagEtiqueta usada por CollectionService para encontrar todas las "cabinas" en el lugar."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

Reemplaza los fondos predeterminados proporcionados por la cabina de fotos. Las imágenes de fondo deben tener una relación de aspecto de 16:9 (1024 × 768) para una experiencia óptima y sus identificaciones de recursos deben incluirse en la matriz de fondos. Se pueden proporcionar fondos de 1 a 4 (ambos incluidos).

LocalScript

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

Eventos

countdownStarted

countdownStarted(): RBXScriptSignal

Se dispara cuando la cuenta regresiva comienza. Este evento solo se puede conectar en un 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

Se dispara cuando la impresión se muestra al usuario. Este evento solo se puede conectar en un 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

Se dispara cuando la impresión se cierra y el botón de la cámara se muestra de nuevo. Este evento solo se puede conectar en un LocalScript.

LocalScript

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

Callbacks

hideOtherGuis

hideOtherGuis(callback:function)

Esta callback se ejecuta inmediatamente antes de que la impresión se muestre, lo que te permite desactivar el ScreenGuis o los elementos completos dentro de ellos antes de que la impresión se muestre. Las GUI usadas por la cabina de fotos tienen el atributo ShowInPhotoBooth establecido en true. Consulta Visibilidad de la GUI para obtener los detalles y el código de ejemplo.

showOtherGuis

showOtherGuis(callback:function)

Esta callback se ejecuta después de que la impresión se ha cerrado, lo que te permite reactivar el ScreenGuis o los elementos completos dentro de ellos. Las GUI usadas por la cabina de fotos tienen el atributo ShowInPhotoBooth establecido en true. Consulta Visibilidad de la GUI para obtener los detalles y el código de ejemplo.