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


نافذة الهيكل في يونيتي ومستعرض روبلوكس ستوديو هما النافذتين الرئيسيتين لتنظيم العناصر في مشاهد ثلاثية الأبعاد:
- كلاهما يسمح لك بإدارة وتنظيم الكائنات (على سبيل المثال، الشخصيات والأصول البيئية).
- كلاهما يستخدم هيكل شجري لعلاقات الأبناء والآباء بين الكائنات.
ومع ذلك، فإن نافذة الهيكل ليس لها هيكل محدد مسبقًا، في حين أن نافذة المستعرض لديها هيكل صارم. قد يساعد على التفكير في نافذة المستعرض كتركيبة من نافذتي الهيكل والمشروع في يونيتي، مع مجلد Workspace كالعنصر الأكثر تميزا.
وبالمثل، فإن مدير الأصول وصندوق الأدوات في روبلوكس يتداخلان مع نافذة المشروع في يونيتي. يتيح لك مدير الأصول إدارة جميع الأصول داخل لعبتك، في حين يتيح لك صندوق الأدوات الوصول إلى أي أصول قمت بنشرها. كما يتيح لك صندوق الأدوات البحث في متجر المبدعين عن الأصول من روبلوكس أو المجتمع، مشابهًا لمتجر الأصول في يونيتي.
الاختلافات الفلسفية
روبلاكس هو "محرك محاكاة" بدلاً من أن يكون محرك ألعاب تقليدي. تعتبر GameObjects في يونيتي وParts في روبلوكس كتل بناء أساسية لإنشاء كائنات في بيئة ثلاثية الأبعاد، لكن في الممارسة العملية، فإن الاثنين مختلفان تمامًا:
- التمثيل: GameObjects في يونيتي هو مفهوم أعلى لأي كائن في المشهد، في حين أن Parts في روبلوكس مصممة لتمثيل كائنات فيزيائية مثل الكتل الخشبية كرات بلاستيكية، بدلاً من الهندسة المجردة مثل الكائنات البدائية في يونيتي.
- الفيزياء: لإجراء محاكيات فيزيائية في يونيتي، تقوم بإرفاق مكونات مثل Rigidbody وCollider إلى GameObject. في روبلوكس، يتم تضمين الفيزياء في نوع بيانات Parts؛ حيث يدير المحرك التفاعلات بشكل تلقائي.
يمكنك رؤية الفرق على الفور إذا قمت بإنشاء GameObject وPart. GameObject ليس لديه أكثر من موقع، دوران، ومقياس. يحتوي Part على نفس المعلومات - بالإضافة إلى مادة ولون، وقيم للانعكاس والشفافية، وكتلة وشكل، وأكثر بكثير. تحويل Part إلى شيء أكثر شبهاً بـ GameObject فارغ يعني إزالة الكثير من الخصائص المدمجة. على العكس من ذلك، يمكنك جعل GameObject يبدو كثيرًا مثل Part عن طريق إضافة مكونات MeshFilter وMeshRenderer وCollider وRigidbody.
من منظور السكربت، فإن GameObject هو الأكثر تشابهًا مع Instance في روبلوكس، وهي الفئة الأساسية لجميع فئات روبلوكس الأخرى، لكن بما أنك لا تستطيع (ولا يمكنك) إنشاء كائنات من نوع Instance، فإن المقارنة ليست عملية بشكل خاص.
مقارنة أخرى هي بين GameObject في يونيتي وModel في روبلوكس. تعمل النماذج كحاوية لمجموعة من الأجزاء المتصلة بطريقة قد تحدد بها علاقة الأب والابن بين العديد من GameObjects في يونيتي. تحدد أحد أجزاء النموذج كجزءه الرئيسي لتعريف نقطة المحور. كما تحتوي النماذج على سكربتات، ورسوم متحركة، وتأثيرات صوتية، ومحفزات، وقيود، ومولدات جزيئات، وأكثر.
على سبيل المثال، قد يحتوي GameObject في يونيتي على مكونات لـ ParticleSystem وPhysics3D وSpringConstraint وسكربت. في نافذة الهيكل، ترى GameObject واحد باسم SpringyFireball. تظهر نافذة المفتش مجموعة المكونات والخصائص.
في روبلوكس، قد يبدو نموذج مشابه لـ SpringyFireball في نافذة المستعرض كالتالي:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
تمتد فلسفة روبلوكس التي تعتمد على الفيزياء بشكل افتراضي إلى عملية بناء النماذج ثلاثية الأبعاد. في روبلوكس، يعتبر عملية ربط عدة أجزاء معًا في تركيب طريقة ممتازة لبناء الأشياء بسرعة، لأن روبلوكس يعامل الأجزاء المربوطة كجسم صلب واحد. هذه الطريقة غير متاحة في يونيتي.
بدلاً من استخدام وحدات قياسية م metric للطول والكتلة، تستخدم روبلوكس وحدات افتراضية تُسمى النقاط ووحدات الكتلة في روبلوكس (RMUs). للحصول على تحويلات تقريبية م metric وتوصيات حول الاستخدام، انظر الوحدات.
الموقع مهم
ألعاب روبلوكس متعددة اللاعبين بشكل افتراضي، لذا يتضمن روبلوكس ستوديو العديد من مواقع التخزين المختلفة بسلوكيات محددة. لمزيد من المعلومات، انظر وقت تشغيل العميل-الخادم وتنظيم الكائنات.
| Location | Description |
|---|---|
| Workspace | تمثل عالم اللعبة ثلاثي الأبعاد. يعمل هذا الموقع بشكل جيد للسكربتات التي تتصل مباشرة بالأشياء وتتحكم في سلوكياتها. |
| ReplicatedFirst | يحتوي على الأشياء التي تتكرر للعميل قبل أي شيء آخر. هذا الموقع مثالي للمجموعة الدنيا المطلقة من الأشياء والسكربتات اللازمة لعرض شاشة تحميل. |
| ReplicatedStorage | يحتوي على الأشياء التي تتكرر لكل من العميل والخادم. هذا الموقع مثالي لـ ModuleScripts التي ترغب في استخدامها على كل من الخادم والعميل. لا تعمل LocalScripts من هذا الموقع، لكن Scripts مع RunContext من نوع Client تعمل. |
| ServerScriptService | يحتوي على سكربتات الخادم. هذا الموقع مثالي للسكربتات التي تحتاج إلى الوصول إلى وظائف أو أشياء من جانب الخادم، مثل منطق اللعبة والتخزين السحابي. |
| ServerStorage | يحتوي على أشياء من جانب الخادم. هذا الموقع مثالي للأشياء الكبيرة التي لا تحتاج إلى التكرار فوراً للعملاء عند انضمامهم إلى اللعبة. لا تعمل السكربتات من هذا الموقع، لكن يمكنك تخزين ModuleScripts من جانب الخادم هنا. |
| StarterPlayer ⟩ StarterCharacterScripts | يحتوي على LocalScripts التي تعمل عندما تظهر الشخصية. |
| StarterPlayer ⟩ StarterPlayerScripts | يحتوي على LocalScripts متعددة الأغراض التي تعمل عندما ينضم اللاعب إلى اللعبة. |
| StarterGui | يحتوي على عناصر واجهة المستخدم التي يعرضها العميل عند تحميل اللعبة. يمكن أن تعمل LocalScripts من هذا الموقع. هذا الموقع مثالي للسكربتات التي تعدل واجهة المستخدم للعبة، مثل إضافة أزرار، قوائم، ومنافذ. |
| StarterPack | عادةً ما يحتوي فقط على Tools، ولكن يمكن أن يتضمن أيضًا LocalScripts لإعداد حقائب اللاعبين. |
السكربت
Roblox games support three different types of Luau scripts:
Client scripts
هذه النصوص تعمل على العميل، وليس لدى الخادم رؤية في سلوكها. لأسباب تتعلق بالإرث، يمكن أن تأخذ هذه النصوص شكل LocalScripts أو Scripts مع قيمة RunContext تساوي Client. عادةً ما تعيش نصوص العميل في ReplicatedStorage أو StarterPlayerScripts أو StarterCharacterScripts.
Server scripts
هذه النصوص تعمل على الخادم، وليس لدى العميل رؤية في سلوكها. تحتوي نصوص الخادم على قيمة RunContext تساوي Server وعادةً ما تعيش في ServerScriptService، والمحتويات الخاصة بها لا يتم تكرارها للعميل.
Module scripts
هذه النصوص هي قطع قابلة لإعادة الاستخدام من التعليمات البرمجية التي تعيد قيمة واحدة فقط، عادةً ما تكون دالة أو جدول (أو جدول من الدوال). بدلاً من تكرار التعليمات البرمجية في نصوص العميل والخادم، استخدم نصوص الوحدة لمشاركة التعليمات البرمجية والبيانات بين الجانبين. غالبًا ما تعيش نصوص الوحدة في ReplicatedStorage، ولكن يمكن أن تعيش في مكان آخر إذا كنت تريد مشاركة التعليمات البرمجية بين النصوص على نفس جانب حدود العميل والخادم.
لا يحتوي يونيتي على مفهوم أنواع السكربت المختلفة. إذا اخترت صنع لعبة متعددة اللاعبين، تستخدم يونيتي مكتبات الشبكات الخاصة بها للإشارة إلى متى ينبغي أن يكون GameObject (وسكريبتاته) حصريًا للخادم.
في يونيتي، تتوفر معظم وظائف المحرك من خلال طرق MonoBehaviour. على سبيل المثال، لتشغيل الكود قبل حلقة العرض، تقوم بإضافة الكود إلى طريقة Update(). لمعالجة أحداث تصادم الفيزياء، تقوم بإضافة الكود إلى طريقة OnCollideEnter().
تكون سكربتات روبلوكس أكثر استنادًا إلى الأحداث. يمكنك الوصول إلى وظائف مماثلة من خلال الاشتراك في الخدمات والاستماع إلى التحديثات.
C# و Luau
للكتابة، تستخدم يونيتي C#. تستخدم روبلوكس Luau، وهي لغة سكربت مستمدة من Lua 5.1.
بالمقارنة مع C#، فإن Luau ذات نوع تدريجي وعادة ما تحتوي على صياغة أقل تفصيلاً. في المشاريع الكبيرة، مع ذلك، قد يؤدي النمط التدريجي إلى إدخال فئات من الأخطاء التي تجنبها اللغات القابلة للتحديد مثل C#، لذا اعتبر تمكين التحقق الصارم من النوع في سكربتات روبلوكس.
للاطلاع على الفروق الأساسية في الصياغة بين لغات السكربت، راجع مقارنة Luau وC#.
نموذج كود Luau
توضح عينة كود Luau التالية كيفية، بعد أن يجهز اللاعب صنارة الصيد، الاستماع إلى إدخال المستخدم (في هذه الحالة، مفتاح E) واستدعاء وظائف إضافية:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- احصل على برنامج وحدة من ReplicatedStorage الذي يعيد دالة واحدة
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- يفترض أن هذه السكربت هو أحد الأطفال الخاصة بصنارة الصيد
local fishingPole = script.Parent
local ACTION_CAST = "إلقاء"
-- تحقق من أن المفتاح مضغوط، ثم اتصل بدالة أخرى
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- تفعيل الإجراء فقط عندما يجهز اللاعب صنارة الصيد
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- تعطيل الإجراء عندما يخلع اللاعب صنارة الصيد
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
يمكن أن يكون سكربت روبلوكس مختصرًا نسبيًا لأن روبلوكس لديها العديد من الافتراضات المدمجة: Player مع شخصية Humanoid متصلة بالخادم ويمكنها تجهيز Tools. هذه الافتراضات غير موجودة في يونيتي، لذا سيكون التنفيذ مختلفًا تمامًا.
الأصول
تدعم يونيتي وروبلوكس كلاهما استيراد الشبكات والنماذج المخصصة بتنسيق .fbx. قد تتطلب بعض أنواع الأصول تكوينات معينة وإعدادات تصدير من برنامج النماذج التابع لك. لمزيد من المعلومات، راجع الصفحات التالية:
في يونيتي، يتم استيراد الكائنات إلى دليل Assets الخاص بك، الذي يظهر في نافذة المشروع. في روبلوكس، يتم استيراد الأصول إلى Workspace وإلى صندوق الأدوات أو مدير الأصول.
كما تقدم روبلوكس مكون إضافي مفتوح المصدر لتبسيط عملية الاستيراد.
التحولات
تقنيات تحويل Unity و CFrames في Roblox تخدم أغراضًا مشابهة في تمثيل التحولات ثلاثية الأبعاد للأجسام:
- كلا من التحويلات و CFrames تمثلان موقع ودوران الجسم في الفضاء ثلاثي الأبعاد. التحويلات تشمل القياس، في حين تستخدم Roblox خاصية BasePart.Size التي لا تعد جزءًا من CFrame.
- كلاهما يدعم الضرب من أجل التحولات المعقدة ولديه طرق مدمجة لمناورات أخرى.
التعاون
في يونيتي، تتعاون مع أنظمة التحكم في الإصدارات القياسية أو خدمات مدفوعة مثل تحكم إصدار يونيتي.
تعيش ملفات روبلوكس في السحابة (على الرغم من أنه يمكنك تصدير نسخ)، لذا يوفر روبلوكس ستوديو سير عمل تعاون مدمج للتحرير المتزامن، وإدارة المجموعات، والأذونات، وصياغة السكربت، وأكثر. راجع التعاون.
الإضافات
مماثلة لأدوات يونيتي، يدعم روبلوكس ستوديو الإضافات، التي يمكن أن تبسط أو تعطيك تحكمًا إضافيًا فوق مختلف جوانب عملية التطوير. الإضافات متاحة في متجر المبدعين، تمامًا مثل الأصول، العديد منها مجاني.
المعجم
| يونيتي | روبلوكس | ملاحظات |
|---|---|---|
| مشهد | مكان | |
| GameObject | Part أو Model | انظر الاختلافات الفلسفية. |
| Prefab | حزمة | |
| Transform | CFrame | CFrame لا يتضمن معلومات الحجم. انظر التحولات. |
| هيكل | مستعرض | |
| مفتش | الخصائص | |
| عرض المشهد | واجهة ثلاثية الأبعاد | |
| عرض اللعبة | واجهة ثلاثية الأبعاد | تتحول واجهة العرض إلى عرض للعبة عند اختبارك للعبتك. |
| نافذة المشروع | مدير الأصول أو صندوق الأدوات | |
| مفتش التضاريس | محرر التضاريس | |
| نقطة الظهور | SpawnLocation | |
| وحدة التحكم | الإخراج | |
| متجر الأصول | متجر المبدعين | |
| الطبقات | شريط الأدوات | |
| أداة | مكون إضافي |