بث الكائنات

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

في اللعبة، يسمح بث الكائنات لمحرك Roblox بتحميل وتفريغ المحتوى ثلاثي الأبعاد والكائنات ذات الصلة ديناميكيًا في Workspace. يمكن أن يحسن ذلك تجربة اللاعب العامة بعدة طرق، بما في ذلك:

  • أوقات انضمام أسرع
    — يمكن للاعبين البدء في اللعب في جزء من العالم بينما يتم تحميل المزيد من العالم في الخلفية.
  • كفاءة الذاكرة
    — يمكن لعب الألعاب على الأجهزة ذات الذاكرة الأقل حيث يتم بث المحتوى ديناميكيًا. يمكن لعب عوالم أكثر غمرًا وتفصيلاً على مجموعة واسعة من الأجهزة.
  • أداء محسّن
    — معدلات إطارات وأداء أفضل، حيث يمكن للخادم قضاء وقت أقل وعرض نطاق ترددي في مزامنة التغييرات بين العالم واللاعبين فيه. يقضي العملاء وقتًا أقل في تحديث الكائنات التي لا تتعلق حاليًا باللاعب.
  • مستوى التفاصيل
    — عند تكوينه، تظل النماذج البعيدة، وأفاتار المنصات، والتضاريس مرئية حتى عندما لا يتم بثها للعملاء، مما يحافظ على تحسين اللعبة دون التضحية تمامًا بالمرئيات الخلفية. يوفر SLIM أعلى مستوى من التفاصيل لكل من النماذج والأفاتار.

يتم التحكم في بث الكائنات من خلال خاصية Workspace.StreamingEnabled، المفعلة بشكل افتراضي للأماكن الجديدة التي تم إنشاؤها في الاستوديو. لا يمكن تعيين هذه الخاصية في نص برمجي.

نافذة الخصائص مع خاصية StreamingEnabled مفعلة.

السلوك الفني

النطاق

تنطبق منطق البث والميزات حصريًا على الكائنات التي هي أحفاد لـ Workspace، بينما الكائنات المخزنة في حاويات أخرى مثل ReplicatedStorage و ReplicatedFirst غير مؤهلة للبث. على سبيل المثال، وضع نموذج ذري تحت ReplicatedStorage لا يضمن النسخ الذري.

البث الداخلي

عندما ينضم لاعب إلى لعبة مع تفعيل بث الكائنات:

  1. يتم نسخ الكائنات في Workspace إلى العميل باستثناء ما يلي:

    Models المعينة إلى غير ذري (افتراضي) عندما يتم تعيين Workspace.ModelStreamingBehavior إلى Improved

    أحفاد الكائنات المذكورة أعلاه

  2. خلال اللعب، قد يقوم الخادم ببث الكائنات في الفئات المؤجلة أعلاه إلى العميل بناءً على خصائص البث للعبة، وموقع اللاعب، وأداء جهاز العميل، وظروف أخرى.

البث الخارجي

خلال اللعب، قد يقوم العميل بإزالة مناطق من BaseParts من Workspace الخاصة باللاعب بناءً على السلوك المحدد بواسطة Workspace.StreamOutBehavior. تبدأ العملية من المناطق الأبعد عن نقاط النسخ وتتحرك أقرب، حسب الحاجة. المناطق داخل نطاق Workspace.StreamingMinRadius لا يتم بثها أبدًا.

لاحظ أن Model بدون أحفاد من BasePart، مثل تلك المستخدمة فقط كـ "حاوية" لكائنات غير BasePart مثل النصوص البرمجية، معفاة من البث الخارجي ما لم يتم جعلها من أحفاد BasePart.

التجميعات

تتدفق التجميعات داخليًا كوحدات كاملة، بما في ذلك قيودها المرتبطة و Attachments، مما يساعد على ضمان تحديثات فيزيائية متسقة على العملاء. الاستثناء الوحيد هو عندما يكون التجميع مربوطًا، في هذه الحالة يتم بث فقط BaseParts داخل نطاق البث جنبًا إلى جنب مع قيودها المرتبطة و Attachments.

لا يتم بث التجميعات خارجيًا حتى تكون جميع BaseParts الخاصة بها مؤهلة للبث الخارجي.

خصائص البث

تتحكم الخصائص التالية في كيفية تطبيق بث الكائنات على لعبتك. جميع هذه الخصائص غير قابلة للبرمجة ويجب تعيينها على كائن Workspace في الاستوديو.

الخاصيةالوصف
EnableSLIMAvatarsيتحكم فيما إذا كان يتم إنشاء نموذج SLIM لشخصيات الأفاتار في اللعبة. عند التفعيل، يتم عرض الأفاتار باستخدام SLIM بنفس الطريقة التي يعمل بها تعيين Model.LevelOfDetail إلى SLIM للنماذج الأخرى. انظر SLIM للحصول على التفاصيل.
ModelStreamingBehaviorيتحكم في كيفية تدفق النماذج غير الذرية (افتراضي) داخليًا وخارجيًا.

موصى به
استخدم Improved لتمكين البث الأكثر كفاءة لـ Models مع أحفاد BasePart.
PredictiveStreamingModeيتيح البث التنبؤي الذي يستخدم إشارات المحرك لبث المناطق التي من المحتمل أن يحتاجها اللاعب قريبًا، مثل مواقع إعادة الظهور أو المناطق التي غادرها اللاعب مؤخرًا عبر تغيير CFrame. التنبؤات إضافية، تنتهي بعد فترة قصيرة إذا لم تُستخدم، ويتم تخطيها على العملاء ذوي الموارد المحدودة.
StreamingIntegrityModeقد يتصرف اللعبة بطرق غير مقصودة إذا انتقل اللاعب إلى منطقة من العالم لم يتم بثها إليهم. توفر هذه الخاصية وسيلة لتجنب تلك المواقف المحتملة الإشكالية.

موصى به
استخدم PauseOutsideLoadedArea لتحقيق توازن بين سلامة اللعب دون التوقف بشكل غير ضروري أو متكرر جدًا. يمكنك أيضًا تخصيص شاشة التوقف.
StreamingMinRadiusتشير هذه الخاصية إلى نصف القطر حول نقاط النسخ التي يتم فيها بث الكائنات بأعلى أولوية. يجب توخي الحذر عند زيادة القيمة الافتراضية، حيث سيتطلب ذلك المزيد من الذاكرة وعرض نطاق ترددي أكبر من الخادم على حساب مكونات أخرى.

موصى به
استخدم القيمة الافتراضية 64 لتعظيم مدى قدرة المحرك على تقليل حجم اللعبة للأجهزة ذات الأداء المنخفض.
StreamingTargetRadiusتتحكم هذه الخاصية في أقصى مسافة بعيدًا عن نقاط النسخ التي يتم فيها بث الكائنات. لاحظ أن المحرك يُسمح له بالاحتفاظ بالكائنات التي تم تحميلها مسبقًا خارج نطاق الهدف، حسب الذاكرة المتاحة.

تقلل قيمة StreamingTargetRadius الأصغر من عبء العمل على الخادم، حيث لن يقوم الخادم ببث كائنات إضافية تتجاوز القيمة المحددة. ومع ذلك، فإن نصف القطر المستهدف هو أيضًا أقصى مسافة سيتمكن اللاعبون من رؤية التفاصيل الكاملة للعبتك، لذا يجب عليك اختيار قيمة تخلق توازنًا جيدًا بين هذين الأمرين.

موصى به
استخدم القيمة الافتراضية 1024 لتحقيق توازن جيد بين الرؤية للاعبين على الأجهزة ذات الأداء العالي وحجم الذاكرة المعقول.
StreamOutBehaviorتحدد هذه الخاصية سلوك البث الخارجي وفقًا لقيمة Enum.StreamOutBehavior. إذا تم تعيينها إلى LowMemory (افتراضي)، يقوم العميل فقط ببث المناطق التي تتجاوز نصف القطر الأدنى في حالة الذاكرة المنخفضة. إذا تم تعيينها إلى Opportunistic، يمكن إزالة المناطق التي تتجاوز StreamingTargetRadius على العميل حتى عندما لا يكون هناك ضغط على الذاكرة (في هذا الوضع، لا يقوم العميل أبدًا بإزالة الكائنات التي تكون ضمن نصف القطر المستهدف، باستثناء حالات الذاكرة المنخفضة).

موصى به
استخدم Opportunistic للسماح للعميل بجمع المحتوى بشكل عدواني، مما يقلل بشكل كبير من استخدام الذاكرة ويساعد على منع الأعطال الناتجة عن نفاد الذاكرة.

نقطة النسخ

بشكل افتراضي، يحدث البث حول PrimaryPart لشخصية اللاعب المحلي، على الرغم من أنه يمكنك تحديد نقطة تركيز نسخ مختلفة من خلال Player.ReplicationFocus.

يمكنك أيضًا إضافة وإزالة نقاط تركيز نسخ إضافية من خلال Player:AddReplicationFocus() و Player:RemoveReplicationFocus() لتمكين البث ديناميكيًا في مناطق متعددة من اللعبة.

تحدث محاكاة الفيزياء على جانب العميل، بما في ذلك التنبؤ وإعادة المحاكاة عند تنفيذ سلطة الخادم، فقط في المناطق المتدفقة، حتى بالنسبة للكائنات التي تم إنشاؤها محليًا و Persistent الكائنات. إذا كان لديك كائنات ترغب في الاستمرار في محاكاتها حتى عندما تكون بعيدة عن الشخصية، قم بإنشاء نقطة تركيز نسخ إضافية بالقرب من تلك الكائنات.

البث التنبؤي

البث التنبؤي هو ميزة اختيارية تستخدم إشارات المحرك لتوقع حركة اللاعب وبث المناطق التي من المحتمل أن يحتاجها اللاعب قريبًا بشكل استباقي. عند تفعيلها عن طريق تعيين PredictiveStreamingMode إلى Enabled، يمكن أن تقلل من توقفات البث وظهور المحتوى المرئي دون أي تغييرات في الكود.

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

عندما يكون PredictiveStreamingMode هو Enabled، تكون الميزات التنبؤية التالية نشطة:

الميزةالوصف
تحميل مسبق للظهورعندما يموت اللاعب، ينشئ المحرك نقاط تركيز بث صغيرة ومؤقتة في مواقع الظهور المحتملة بحيث تبدأ المناطق المحتملة لإعادة الظهور في البث قبل ظهور شخصية اللاعب، مما يقلل من التوقفات والمحتوى المفقود مباشرة بعد إعادة الظهور.
تحسين عائد CFrameعندما يكون اللاعب CFrames بعيدًا عن منطقة، ينشئ المحرك نقطة تركيز بث صغيرة ومؤقتة في الموقع الذي غادره. يساعد ذلك في الحفاظ على تلك المنطقة متدفقة إذا عاد اللاعب بعد فترة قصيرة، وهو سيناريو شائع عند الانتقال بين المباني أو الطوابق الفرعية أو المتاجر أو المراكز.

تحكمات بث النموذج

لتجنب المشكلات المتعلقة بالبث على أساس كل نموذج وتقليل استخدام WaitForChild()، يمكنك تخصيص كيفية تدفق Models وأحفادها من خلال خاصية ModelStreamingMode.

غير ذري

بشكل افتراضي، تكون النماذج Nonatomic وتتدفق داخليًا وخارجيًا بناءً على ما إذا كانت Workspace.ModelStreamingBehavior تم تعيينها إلى Legacy (افتراضي) أو Improved.

قديم

عندما يتم تعيين Workspace.ModelStreamingBehavior إلى Legacy (افتراضي)، يتم نسخ حاوية Model وأحفادها غير BasePart مثل Scripts إلى العميل عندما ينضم اللاعب. ثم، عندما تكون مؤهلة، تتدفق أحفاد BasePart للنموذج.

محسن

عندما يتم تعيين Workspace.ModelStreamingBehavior إلى Improved، يختلف سلوك بث النموذج بناءً على ما إذا كان النموذج يحتوي على أحفاد BasePart أو لا يحتوي على أحفاد BasePart:

  • يتدفق نموذج يحتوي على أحفاد BasePart داخليًا فقط عندما يكون واحد من أحفاده BasePart مؤهلاً للبث الداخلي. في هذه المرحلة، يتدفق النموذج و BasePart المؤهل، جنبًا إلى جنب مع أحفاد النموذج غير BasePart.

    عندما يتدفق آخر BasePart المتبقي من النموذج خارجيًا، سيتدفق النموذج نفسه خارجيًا معه.

  • نموذج بدون أحفاد من BasePart، مثل الذي يستخدم فقط كـ "حاوية" لكائنات غير BasePart مثل النصوص البرمجية، يتم نسخه إلى العميل بعد فترة وجيزة من انضمام اللاعب. هذا النوع من النموذج معفى من البث الخارجي ما لم يتم جعله من أحفاد BasePart.

ذري

إذا تم تعيين Model إلى Atomic، يتم بث جميع أحفاده الأولية معًا عندما يكون أحد أحفاد BasePart مؤهلاً للبث الداخلي. نتيجة لذلك، يحتاج نص برمجي على جانب العميل يحتاج إلى الوصول إلى الكائنات داخل النموذج إلى استخدام WaitForChild() على النموذج نفسه، ولكن ليس على أحفاد MeshPart أو Part حيث يتم إرسالها جنبًا إلى جنب مع النموذج.

لا يتم بث نموذج ذري خارجيًا إلا عندما تكون جميع أجزائه السلف مؤهلة للبث الخارجي، في هذه المرحلة يتدفق النموذج بالكامل خارجيًا معًا.

رسم توضيحي يوضح بث النموذج الذري مع الأطفال.

دائم

النماذج Persistent ليست خاضعة للبث العادي داخليًا أو خارجيًا. يتم إرسالها كوحدة ذرية كاملة بعد فترة وجيزة من انضمام اللاعب وقبل أن يتم تشغيل حدث Workspace.PersistentLoaded . لا يتم بث النماذج الدائمة وأحفادها خارجيًا، ولكن للتعامل بشكل آمن مع البث الداخلي ضمن نص برمجي على جانب العميل، يجب عليك الانتظار حتى يتم تشغيل حدث PersistentLoaded.

رسم توضيحي يوضح بث النموذج الدائم مع الأطفال.

دائم لكل لاعب

تتصرف النماذج المعينة إلى PersistentPerPlayer بنفس طريقة Persistent للاعبين الذين تمت إضافتهم باستخدام Model:AddPersistentPlayer(). بالنسبة للاعبين الآخرين، يكون السلوك هو نفسه مثل Atomic. يمكنك التراجع عن نموذج من الاستمرارية الخاصة باللاعب عبر Model:RemovePersistentPlayer().

تخصيص شاشة التوقف

بافتراض أن Workspace.StreamingIntegrityMode تم تعيينه إلى PauseOutsideLoadedArea الموصى به، ستتوقف اللعبة إذا انتقل اللاعب إلى منطقة من العالم لم يتم بثها إليهم. في هذه الحالات، تشير خاصية Player.GameplayPaused إلى حالة التوقف الحالية للاعب والتي يمكن استخدامها مع اتصال GetPropertyChangedSignal() لعرض أو إخفاء واجهة المستخدم المخصصة.

LocalScript
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local player = Players.LocalPlayer
-- تعطيل نافذة التوقف الافتراضية
GuiService:SetGameplayPausedNotificationEnabled(false)
local function onPauseStateChanged()
if player.GameplayPaused then
-- عرض واجهة المستخدم المخصصة
else
-- إخفاء واجهة المستخدم المخصصة
end
end
player:GetPropertyChangedSignal("GameplayPaused"):Connect(onPauseStateChanged)

تصحيح الأخطاء في وقت التشغيل

يتضمن المحرك عدة لوحات تصحيح على الشاشة يمكن تمكينها على العميل باستخدام اختصارات لوحة المفاتيح. للوصول إلى معلومات تصحيح البث:

  1. افتح ملخص الشبكة عبر ShiftCtrlF3 (Windows) أو ShiftF3 (Mac).
  2. بمجرد فتح لوحة التصحيح، اضغط على Shift1 بشكل متكرر للتنقل بين الألواح المتاحة. اللوحة الرابعة هي عرض تصحيح البث الذي يعرض معلومات مفيدة في وقت التشغيل:
    • إعدادات البث النشطة
    • المناطق المحملة حاليًا (المتدفقة)
    • سلوك البث والحالة

بمجرد تمكينها، تظهر المناطق المميزة بالألوان في عرض ثلاثي الأبعاد:

اللونالوصف
أقل من StreamingMinRadius
أكبر من أو يساوي StreamingMinRadius وأقل من StreamingTargetRadius
يساوي StreamingTargetRadius
أكبر من StreamingTargetRadius
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.