الأضواء الوامضة هي قوة قوية في التأثير على نبرة البيئة. على سبيل المثال، يمكن أن يبدو المنزل الذي يحتوي على إضاءة ساطعة ثابتة دافئًا وجذابًا، ولكن إذا أضفت أضواء وامضة إلى ممر ذلك المنزل، فإنه يصبح وحيًا وقد يشير إلى خطر محتمل في المستقبل. من خلال نمذجة وبرمجة مصادر الضوء المختلفة داخل تجربتك بشكل استراتيجي، يمكنك إضافة مستوى جديد تمامًا إلى رواية القصص البيئية الخاصة بك.
كما هو الحال مع جميع إنشاءات ثلاثية الأبعاد، هناك العديد من الطرق لتحقيق أي هدف معين. في هذا الدليل، يمكنك بسرعة إنشاء حركة ضوء وامض باستخدام الأدوات والأساليب المتاحة فقط داخل الاستوديو مع عدد قليل من الأصول الأساسية، بما في ذلك ملف .rbxm لنموذج مصباح المصرفي الذي يحتوي على أجزاء Class.MeshParts فرعية يمكنك تخصيصها لتناسب جمالية تجاربك الخاصة.
في الطريقة التالية لإنشاء أضواء ومضاءة، اتبع كل قسم لتتعلم كيفية إنشاء:
- سطوع NumberSequence للتأثير على سطوع المصباح بمرور الوقت.
- خاصية مدة الحلقة لتحديد المدة التي يجب أن تستغرقها كل حلقة الومضة.
استيراد المصباح النموذجي
يستخدم هذا الدليل ملف .rbxm القابل للتنزيل لنموذج مصباح مصرفي قابل للتخصيص عالي الجودة لعرض تقنية الضوء الومض. يمكنك استخدام هذا النموذج لفهم المبادئ الأساسية، ثم تطبيقها على نماذجك الخاصة التي تقوم بإنشائها داخل الاستوديو أو في برامج نمذجة طرف ثالث أخرى.
لاستيراد مصباح المصرفي .rbxm:
في نافذة المستكشف، انقر بزر الماوس الأيمن على Workspace. تظهر قائمة سياقية.
اختر إدراج من ملف… تظهر لك نافذة مستعرضة.
اختر مصباح المصرفي .rbxm، ثم انقر على زر فتح. يظهر النموذج داخل نافذة العرض.

إنشاء سطوع NumberSequence
NumberSequence هو نوع بيانات يمثل سلسلة من قيم الأرقام من 0 إلى 1 على مدى عمر الضوء. يعد هذا النوع من بيانات مفيداً لإنشاء أضواء ومض، حيث يمكنك تحديد كيفية تغيير سطوع ضوء المصباح على مدى عمره، وعندما تغير السطوع من شدة كاملة إلى عدم وجود إضاءة على الإطلاق في فترات قصيرة، يمكنك تحقيق تأثير الومض.
يمثل محور X في NumberSequence الوقت، ويمثل محور Y السطوع النسبي. كل مربع في بداية ونهاية سلسلة الأرقام هو نقطة رئيسية تحدد قيمة الخاصية في تلك النقطة من عمر سطوع الضوء. عندما تقوم بإنشاء NumberSequence لأول مرة، يكون الرسم البياني خطًا مستقيمًا ويظل الضوء بنفس شدة السطوع طوال عمره، ولكن من خلال إضافة وتحريك النقاط الرئيسية، يمكنك إنشاء منحنيات داخل السلسلة وتغيير سطوع المصباح بمرور الوقت.

بينما لا يحتوي المصباح على NumberSequence للسطوع بشكل افتراضي، يمكنك إنشاء خاصية سطوع، وضبطها على نوع NumberSequence، ثم التجريب من خلال إضافة نقاط رئيسية بقيم مختلفة حتى يومض الضوء بتواتر تم ضبطه.
لإنشاء NumberSequence للسطوع:
أضف خاصية جديدة من نوع NumberSequence إلى نموذج المصباح.
في نافذة المستكشف، اختر نموذج المصباح.
في نافذة الخصائص، انتقل إلى قسم الخصائص وانقر على زر إضافة خاصية. تظهر لك حوار إضافة خاصية.
في حوار إضافة خاصية،
في حقل الاسم، أدخل BrightnessCurve.
انقر على قائمة النوع المنسدلة، ثم اختر NumberSequence.
انقر على زر حفظ. تظهر الخاصية الجديدة في قسم الخصائص في نافذة الخصائص.

اختر الخاصية الجديدة BrightnessCurve، ثم انقر على الزر …. تظهر لك نافذة منبثقة لسلسلة الأرقام.

قم بأحد الإجراءات التالية:
- لتغيير السطوع عند نقطة معينة، انقر على نقطة رئيسية واسحبها لأعلى أو لأسفل، أو أدخل قيمة في حقل القيمة.
- لإدراج نقاط رئيسية جديدة، انقر على أي نقطة في الرسم البياني.
- لحذف نقطة رئيسية، اختر النقطة الرئيسية، ثم انقر على زر حذف.
- لإضافة نطاق عشوائي للسطوع، انقر على أي نقطة رئيسية واسحب خطوط المحيط لأعلى أو لأسفل. في تلك اللحظة، يتولد الضوء عند سطوع عشوائي بين المحيط الوردي.
على سبيل المثال، يجعل الرسم البياني التالي الضوء يومض ليصل إلى سطوع كامل في الومضة الأولى، و50% سطوع في الومضة الثانية، ثم 75% سطوع في الومضة الثالثة.

إنشاء مدة الحلقة
الآن بعد أن لديك NumberSequence لتحديد كيفية تغيير سطوع ضوء المصباح على مدى عمره، يجب عليك تحديد مدة الوقت التي تريد أن تستغرقها حلقة الومض. بعبارة أخرى، تتحكم مدة الحلقة هذه في عدد مرات تكرار NumberSequence، بالثواني.
لإنشاء مدة الحلقة:
أضف خاصية جديدة من نوع مدة الحلقة إلى نموذج المصباح.
في نافذة المستكشف، اختر نموذج المصباح.
في نافذة الخصائص، انتقل إلى قسم الخصائص وانقر على زر إضافة خاصية. تظهر لك حوار إضافة خاصية.
في حوار إضافة خاصية،
في حقل الاسم، أدخل LoopDuration.
انقر على قائمة النوع المنسدلة، ثم اختر Number.
انقر على زر حفظ. تظهر الخاصية الجديدة في قسم الخصائص في نافذة الخصائص.

اضبط الخاصية الجديدة LoopDuration على 1. وهذا يخبر NumberSequence بتكرارها بعد ثانية واحدة.
برمجة ومض الضوء
الآن بعد أن لديك جميع العناصر للتحكم في سطوع المصباح على مدى عمره، حان الوقت لإنشاء Script الذي سيجمع كل شيء معًا ويجعل الضوء يومض.
لبرمجة ومض الضوء:
- في نافذة المستكشف، قم بتحريك الماوس فوق نموذج المصباح وانقر على زر ⊕. تظهر لك قائمة سياقية.
- من القائمة، أدخل نصًا برمجيًا.
- في النص البرمجي الجديد، أدخل ما يلي:
local RunService = game:GetService("RunService")
-- يحصل على قيم الخصائص المحددة على النموذج.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- يخزن مراجع لنسخ النموذج التي ستتغير.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- يخزن القيم الأصلية للخصائص التي ستتغير.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- يحصل على قيمة NumberSequence (ns) في وقت معين (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- إذا كنا عند 0 أو 1، نعيد القيمة للنقطة الرئيسية الأولى أو الأخيرة، على التوالي.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- خلاف ذلك، يتنقل عبر كل زوج متسلسل من النقاط الرئيسية.
for i = 1, #ns.Keypoints - 1 do
-- يحصل على النقطة الرئيسية الحالية والتالية.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- إذا كانت nsTime بين أوقات النقاط الرئيسية،
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- يحسب مكان nsTime بالنسبة لأوقات النقاط الرئيسية، ويسمى هذا ألفا.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- يعيد القيمة بين النقاط لـ nsTime باستخدام ألفا.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- يحل لـ وقت NumberSequence (بين 0 و 1).
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- يحصل على قيمة NumberSequence في هذا الوقت.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- يضبط السطوع ولون الخصائص بناءً على هذه القيمة.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
عند اختبار تجربتك، يتم تنفيذ اتصال حدث Heartbeat كل إطار زمني:
- يحل الوقت (numberSequenceTime) داخل brightnessCurve NumberSequence بناءً على الوقت الحالي.
- يكون الوقت بين 0 و 1 حيث تمثل هذه النقاط البداية والنهاية لسلسلة رقمية على التوالي.
- يحل القيمة (brightnessValue) لـ brightnessCurve NumberSequence في الوقت numberSequenceTime.
- تقوم evaluateNumberSequence() بحساب القيمة المرتبطة بالوقت لأي NumberSequence.
- هذه القيمة تعمل كقيمة سطوع نسبية لتطبيقها على الخصائص التي تتغير بمرور الوقت.
- يغير خصائص المصابيح من خلال ضرب brightnessValue بضوء المصباح، سطوع الحزمة، ولون المصباح.
تؤدي التغييرات في هذه الخصائص بمرور الوقت إلى تأثير الومض أدناه.