拍摄照片是纪念美好体验的完美方式。PhotoBooth 开发者模块 是一个易于使用的照片布置工具,允许玩家与代表他们经历的背景摆出独特的姿势。
模块使用
安装
要在体验中使用PhotoBooth模块:
从Studio的窗口菜单或首页选项卡工具栏中打开工具箱,然后选择创作者商店选项卡。

确保已选择模型排序,然后单击查看全部按钮以查看类别。

找到并单击包瓷砖。
找到照片亭模块并单击它,或将其拖放到3D视图中。

在资源管理器窗口中,将整个PhotoBooth模型移动到ReplicatedStorage中。运行体验后,模块将开始运行。
定位亭
该模块附带一个PhotoBooth模型,您可以在3D世界中进行定位。此模型是玩家用来设置照片的交互对象。
在模块主文件夹的Workspace文件夹中找到PhotoBooth网格。

将其移动到顶层Workspace层次结构中,并定位到所需位置。

配置
该模块经过预配置,可以支持大多数用例,但可以通过配置函数轻松自定义。例如,要更改照片底部的默认消息:
在StarterPlayerScripts中,创建一个新的LocalScript并将其重命名为ConfigurePhotoBooth。

将以下代码粘贴到新脚本中。
LocalScript - ConfigurePhotoBoothlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PhotoBooth = require(ReplicatedStorage.PhotoBooth)PhotoBooth.configure({frameMessage = "第一次照片亭拍摄!",})
连接到事件
每次照片亭向本地客户端显示新屏幕时,都会触发相应事件。这些事件可以在LocalScript中连接,以便您可以用自定义逻辑进行响应。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage.PhotoBooth)
PhotoBooth.countdownStarted:Connect(function()
print("倒计时已开始")
end)
PhotoBooth.printoutShown:Connect(function()
print("打印输出正在显示")
end)
PhotoBooth.promptShown:Connect(function()
print("相机提示正在显示")
end)
GUI可见性
默认情况下,照片亭在拍摄照片时会隐藏所有ScreenGuis和CoreGuis。如果您想覆盖这种自动隐藏行为,并以编程方式决定哪些GUI应该保持可见,请包含hideOtherGuis和showOtherGuis回调,并用您的自定义逻辑进行响应。
LocalScript
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local PhotoBooth = require(ReplicatedStorage.PhotoBooth)
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- 创建一个不会被隐藏的屏幕 GUI
local specialGuiInstance = Instance.new("ScreenGui")
-- 在照片亭 GUI 之上绘制屏幕 GUI
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- 在屏幕 GUI 上设置属性以防止隐藏
specialGuiInstance:SetAttribute("ShowInPhotoBooth", true)
-- 向 GUI 中添加文本标签
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "拍照时保持可见"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
PhotoBooth.hideOtherGuis(function()
-- 隐藏所有开发者定义的屏幕 GUIs,除非它们是带有属性的
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance:GetAttribute("ShowInPhotoBooth") and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- 隐藏特定核心 GUIs
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
PhotoBooth.showOtherGuis(function()
-- 显示所有被隐藏的开发者定义的屏幕 GUIs
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- 显示所有被隐藏的特定核心 GUIs
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)
API 参考
函数
configure
configure(config: table)
通过config表中的以下键/值覆盖默认配置选项。此函数只能从LocalScript中调用。
| 键 | 描述 | 默认值 |
|---|---|---|
| frameMessage | 在照片底部显示的消息。可以通过fadeUiDelay属性控制其持续时间。 | "使用您的设备拍摄屏幕截图并分享!" |
| fadeUiDelay | 在淡出之前显示框架消息的时间,以秒为单位。设置为负数则永远不会淡出。 | 3 |
| closeButtonImage | 用于关闭照片按钮的图像,放置在closeButtonBackgroundImage图像之上。 | "rbxassetid://7027440823" |
| closeButtonBackgroundImage | 用于关闭照片按钮的背景图像。 | "rbxassetid://7027440891" |
| cameraLandscapePosition | 照片亭相机在拍摄横向模式照片时,位于角色前面和上方的距离(Vector2)。 | (5, 2) |
| cameraPortraitPosition | 照片亭相机在拍摄纵向模式照片时,位于角色前面和上方的距离(Vector2)。 | (10, 1) |
| countdownFont | 倒计时数字使用的字体(Enum.Font)。 | GothamBlack |
| countdownTextColor | 倒计时中数字的颜色(Color3)。 | [255, 255, 255] |
| printoutCharacterPosition | 打印输出显示时角色在屏幕上的位置(UDim2)。 | (0.5, 0, 0.5, 0) |
| printoutCharacterSize | 角色在打印输出中占用的屏幕空间大小(UDim2)。 | (1, 0, 1, 0) |
| characterAnimation | 角色在照片中采用的动画的资产ID,在起始帧暂停。 | "rbxassetid://6899663224" |
| filterImage | 作为滤镜应用于照片的图像。如果为nil,则将使用默认的滤镜,使图像边缘变暗。 | nil |
LocalScript - ConfigurePhotoBoothlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PhotoBooth = require(ReplicatedStorage.PhotoBooth)PhotoBooth.configure({frameMessage = "真酷的姿势!",fadeUiDelay = 5,maxActivationDistance = 5,printoutCharacterSize = UDim2.fromScale(1.5, 1.5),})
setBackgrounds
setBackgrounds(backgrounds: table)
覆盖照片亭提供的默认背景。背景图像应具有16:9的纵横比(1024×576),以获得最佳体验,并且其资产ID应包含在背景数组中。可以提供1–4(包括)个背景。
LocalScriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local PhotoBooth = require(ReplicatedStorage.PhotoBooth)PhotoBooth.setBackgrounds({"rbxassetid://7018713114","rbxassetid://950538356",})
事件
countdownStarted
倒计时开始时触发。此事件只能在LocalScript中连接。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage.PhotoBooth)
PhotoBooth.countdownStarted:Connect(function()
print("倒计时已开始")
end)
printoutShown
打印输出显示给用户时触发。此事件只能在LocalScript中连接。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage.PhotoBooth)
PhotoBooth.printoutShown:Connect(function()
print("打印输出正在显示")
end)
promptShown
打印输出关闭并且相机按钮再次显示时触发。此事件只能在LocalScript中连接。
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PhotoBooth = require(ReplicatedStorage.PhotoBooth)
PhotoBooth.promptShown:Connect(function()
print("相机提示正在显示")
end)
回调
hideOtherGuis
hideOtherGuis(callback: function)
此回调在打印输出显示之前立即运行,让您在打印输出显示之前禁用整个ScreenGuis或其中的元素。照片亭使用的GUIs具有属性ShowInPhotoBooth设置为true。有关详细信息和示例代码,请参见GUI可见性。
showOtherGuis
showOtherGuis(callback: function)
此回调在打印输出关闭后运行,让您重新启用整个ScreenGuis或其中的元素。照片亭使用的GUIs具有属性ShowInPhotoBooth设置为true。有关详细信息和示例代码,请参见GUI可见性。