أخذ صورة هو وسيلة مثالية لتخليد تجربة رائعة. إن وحدة PhotoBooth للمطور هي أداة staging للصور سهلة الاستخدام تتيح للاعبين أن يتخذوا وضعاً فريداً مع خلفية تمثل تجربتهم.
استخدام الوحدة
التثبيت
لاستخدام وحدة PhotoBooth في تجربة:
من قائمة Window في الاستوديو أو شريط أدوات علامة Home، افتح Toolbox واختر علامة Creator Store.

تأكد من تحديد تصنيف Models، ثم انقر على زر See All لفئات Categories.

حدد وانقر على بلاطة Packages.
ابحث عن وحدة Photo Booth وانقر عليها، أو اسحبها وأفلتها في العرض ثلاثي الأبعاد.

في نافذة Explorer، انقل نموذج PhotoBooth بالكامل إلى ReplicatedStorage. عند تشغيل التجربة، ستبدأ الوحدة في التشغيل.
وضع الكشك
تأتي الوحدة مع نموذج PhotoBooth واحد يمكنك وضعه في العالم ثلاثي الأبعاد. هذا النموذج هو ما سيتفاعل معه اللاعبون لإعداد صورة.
انقر على الشبكة PhotoBooth داخل مجلد Workspace في المجلد الرئيسي للوحدة.

انقله إلى تسلسل Workspace العلوي وضعه في المكان المطلوب.

التكوين
تم تكوين الوحدة مسبقًا للعمل في معظم حالات الاستخدام، ولكن يمكن تخصيصها بسهولة من خلال وظيفة configure. على سبيل المثال، لتغيير الرسالة الافتراضية في أسفل الصورة:
في 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)
رؤية واجهة المستخدم
بشكل افتراضي، يخفي كشك الصور جميع ScreenGuis و CoreGuis عندما يتم إعداد صورة. إذا كنت ترغب في تجاوز هذا السلوك الآلي وإصدار القرار برمجيًا بشأن أي واجهات يجب أن تظل مرئية، قم بإدراج الدالتين 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 = {}
-- أنشئ واجهة شاشة لن يتم إخفاؤها
local specialGuiInstance = Instance.new("ScreenGui")
-- ارسم واجهة الشاشة فوق واجهة كشك الصور
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- تعيين السمة على واجهة الشاشة لمنع الإخفاء
specialGuiInstance:SetAttribute("ShowInPhotoBooth", true)
-- إضافة نص إلى واجهة المستخدم
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()
-- إخفاء جميع واجهات الشاشة المحددة من قبل المطور باستثناء تلك المميزة بالخاصية
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
-- إخفاء واجهات جذرية محددة
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
PhotoBooth.showOtherGuis(function()
-- إظهار جميع واجهات الشاشة المحددة من قبل المطور التي تم إخفاؤها
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- إظهار واجهات جذرية محددة تم إخفاؤها
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 | معرف الأصول للحركة التي تأخذها الشخصية في الصورة، متوقفة عند الإطار الأول. | "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) للحصول على تجربة مثالية ويجب تضمين معرفاتها في مصفوفة الخلفيات. يمكن تقديم 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 أو العناصر داخلها قبل عرض الطباعة. تمتلك واجهات المستخدم المستخدمة من قبل كشك الصور صفة ShowInPhotoBooth مع تعيينها إلى true. انظر رؤية واجهة المستخدم للحصول على التفاصيل وعينة من الكود.
showOtherGuis
showOtherGuis(callback: function)
يتم تشغيل هذه الاستدعاء بعد إغلاق الطباعة، مما يتيح لك إعادة تمكين جميع ScreenGuis أو العناصر داخلها. تمتلك واجهات المستخدم المستخدمة من قبل كشك الصور صفة ShowInPhotoBooth مع تعيينها إلى true. انظر رؤية واجهة المستخدم للحصول على التفاصيل وعينة من الكود.