post

ميزات 2019.3 Unity – الجزء الثاني

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

في هذا الفيديو سنقوم بالإكمال على الميزات التي تم إضافتها للمطورين Developers وكيف أنهم قامو بإضافة العديد من التحيسنات على الواجهة الرسومية للمحرك ، وتحسينات على آداء المحرك نفسه، بالإضافة إلى الحديث عن بعض الميزات التي أضافوها للمنصات الأخرى إن كانت للـ Mobile أو لل VR أو ال AR.

أدوات جديدة للمطورين

1 . تحسين عملية الـ Serialization

يبدو تبسيط البيانات واضحاً بعدما قدمت الشركة طرق جديدة في ال Serialization ، وبشرح بسيط فعلمية ال Serialization هي تحويل ال Objects إلى قيم أو نصوص يمكن تخزينها على القرص الصلب أو قواعد البيانات أو الذاكرة، فسابقاً كان يتم إضافة وسم [Serializable] لل Class وبالتالي كان المحرك يقوم بتحويله إلى قيم نوعية Value Type ، الآن أصبح بالإمكان إضافة وسم SerializeReference وبالتالي أصبح بالإمكان تحويل ال Classes إلى references ، هذا يعني أنه أصبح الآن بالإمكان ربط أكثر من كائن ببعض، الذي بدوره سيؤدي إلى تبسيط الكود لإدارة هيكلية بيانات معقدة مثل الـ graphs و الـ trees .

أيضاً تم إضافة مكتبة UnityYAML لتسريع عملية ال serialization خصوصاً في مرحلة تحميل المراحل. ويمكن تعريفها على أنها شيء مشابه لل JSON وهي طريقة تحويل ال Object إلى شيء يمكن كتابته على القرص الصلب أو الذاكرة.

2 . تسريع الدخول في Play Mode

قامت الشركة أيضاً بإضافة ميزة تجريبية قد توفر عليك ما يقارب 50% إلى 90% من وقت الإنتظار بعد أن تقوم بالضغط على زر Play لتجريب النتائج الجديدة الخالية من تعديلات الكود. فبواسطة خاصية Enter Play Mode التجريبية يمكنك تجاوز مرحلتين أساسيتين يقوم بهما المحرك. فسابقاً عندما تقوم بالضغط على زر Play كان المحرك يقوم بإعادة تهئية ال Codes بما يعرف بإسم Domain Reload كمرحلة أولى، وبإعادة تحميل المشهد Reload the scene كمرحلة ثانية، الآن بهذه الميزة التجريبية يمكنك بعد تفعيلها من إعدادات المشروع Project Settings تحت قائمة Editor بوضع علامة صح بجانب خيار Enter Play Mode ، يمكنك تقليل الوقت خصوصاً في المشاريع الضخمة.

3. تحسينات على الـ Profiler

في النسخ السابقة لنسخة 2019.3 عندما كنا نقوم بتحليل اللعبة بواسطة أداة الـ Profiler التي تقوم بإعطاء تفصيل دقيق لكل أقسام اللعبة لكشف مقدار السرعة في الأداء ومقدار الحجم في الذاكرة، كان سابقاً يقوم بعمل تسجيل لآخر 300 فريم، والتي كانت أحياناً غير كافية لإستخراج بيانات تفصيلية نريدها، في هذه النسخة تم إضافة ميزة لزيادتها من 300 فريم إلى 2000 فريم .

أيضاً تم إضافة ميزة Deep Profiling Support في حال كانت النسخة لمنصة PC Standalone حيث يمكن تسجيل الوقت عند إستدعاء أي دالة c# Methods ، طبعاً هذا الخيار مفيد جداً في عملية تحسين اللعبة وال Testing مع مراعاة أن تفعيل هذا الخيار سيعطي بطئ للعبة كونها ستقوم بالتسجيل أيضاً.

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

4. تحسينات على طريقة كتابة DOTS

كما ذكرنا في الجزء الأول من الميزات أن DOTS إختصار لـ Data-Oriented Technology Stack ، وهي من أكثر الأمور التي قدمت للمطورين فرص لتحسين ألعابهم، ففي هذه النسخة قامت الشركة بتقليص عدد الأسطر البرمجية لتحقيق الميزات السابقة، حيث أصبحت تستخدم C# Job System بالإضافة إلى Backend Compiled إسمه Burst Compiler حيث يعتبر مترجم متدني المستوى Low Level Virtual Machine ويقوم بتحويل أسطر لغة الـ C# إلى أسطر محسنة بلغة الآلة Machine Code .

5. تحسينات على ال Physics

بالبداية قامت الشركة بتطوير النسخة المستخدمة من PhysX المحرك مفتوح المصدر المطور من شركة Nvidia الخاص بالحسابات الفيزيائية، حيث تم تطوير المكتبة من نسخة v3.4 إلى v4.1 ، ويمكن الرجوع إلى صفحة المحرك لمشاهدة الأمور الجديدة التي تم إضافتها، من أهمها هي تقديم Solver جديد لربط ال Joint الخاصة بتحريك المجسمات وجعلها أقل عرضة لعمليات ال Stretch بالتفاعل مع المجسمات المحيطة، وتطوير خوارزمية سابقة لتصبح أكثر فاعلية في توليد المجسمات في وقت اللعب لتأخذ وقت وكلفة قليلة من مواصفات الجهاز، بالإضافة لأمور أخرى.

على صعيد آخر قامت شركة Unity بتقديم المحرك الفيزيائي الشهير Havok بنسخة متقدمة مبنية على تقنية ال DOTS حيث تعاونت الشركة المنتجة مع شركة Unity لإصدار هذه النسخة الحصرية، فهي متاحة فقط من خلال ال Package Manager وتحتوي على 3 باقات إحداها مجانية والباقي يأتي من ضمن ال subscription plans الخاصة لمحرك اليونيتي، ويجدر بالذكر أن محرك Havok مبني على native C++ حيث أنه يقدم نتائج سريعة ودقيقة لمن يهتمون بالدرجة الأولى بالفيزيائية في ألعابهم، وهي مناسبة جداً لأجهزة ال Consoles والموبايل.

أدوات المرئيات Graphics

1. نمط الإظهار المتقدم HDRP

إن كنت تطمح للإستفادة القصوى من المرئيات والإظهار المتقدم فعليك إختيار HDRP المختصر من High Definition Render Pipeline حيث أنه في هذه النسخة أصبح Verified بعدما كان تجريبي Preview ، فهو يقدم الجودة العالية للإظهار Rendering ، ويمكنك مشاهدة الفيلم الدعائي القصير المنتج من الشركة بعنوان ( The Heretic ) ، ففي نسخة 2019.3 أضافو إمكانية كتابة معالجة للصورة النهائية خاص بك بواسطة Custom Post-Processing ، بالإضافة إلى ميزة Physically Based Sky ، حيث أصبح بالإمكان الآن محاكاة الشمس والسماء الحقيقية بناءاً على الوقت، مما يتيح لك إلتقاط مشاهد نهارية أو ليلية جميلة.

أيضاً الآن بالإمكان تشغيل تقنية الواقع الإفتراضي VR مع الإظهار المتقدم HDRP للحصول على أقصى جودة تحاكي المشاهد الحقيقية، ويجب التنويه أن الإظهار المتقدم HDRP يستنزف موارد الجهاز لذلك ينصح بإستخدامه فقط مع الأجهزة المتطورة جداً high-end hardware.

ومن ضمن الميزات التجريبية الجديدة المضافة إلى HDRP ميزة real-time ray tracing features ، التي تعطي نتائج واقعية للضوء ولفيزيائية الضوء، فهي تقوم بحسابات الإنعكاس والظلال والإنكسار بالإعتماد على نوع المادة الساقط عليها الضوء، وهي تقدم أكثر ميزتين مطلوبتين وهما الـ global illumination والـ ambient occlusion بالإضافة للميزات الأخرى التي تحول الصور إلى حقيقة. التي كانت ولا تزال تحتاج إلى وقت تصيير طويل Long Time Render وإلى مواصفات جهاز عالية جداً، كما المصيرات Renderer المشهورة مثل ال Vray وغيرها.

2. نمط الإظهار المتوسط URP

نمط الإظهار المتوسط الـ Universal Render Pipeline أو ما كان يعرف سابقاً بالـ LWRP المختصر من Lightweight Render Pipeline هو نسخة مبسطة من نمط HDRP وهو أفضل من النمط التقليدي Default Render Pipeline ، حيث يأتي هذا النمط حالياً بشكل forward renderer حيث يقوم بحساب جميع الإضاءة في طبقة واحدة، وهو يدعم أنواع جديدة من الإضاءة في حال تم إستخدام 2D Renderer كما وضحنا في الجزء الأول من الميزات، وتم زيادة عدد الأضواء المسموح بها بهذا النمط إلى 256 ضوء في حال كان التطوير لغير الموبايل، أما الموبايل فتم زيادته أيضاً وهو يدعم 32 ضوء ، وهناك نسخة deferred renderer قادمة قريباً إليه.

المؤثرات البصرية Post-processing الآن تم تضمينها داخل النمط بعدما كان يتم إضافتها بشكل منفصل، حيث بإمكانك الحصول على تأثير تنعيم الأطراف ومانع التكسير anti-aliasing ، وتأثير التركيز بعمق depth of field ، وتأثير camera motion blur ، و Panini projection ، و bloom ، و lens distortion ، و chromatic aberration ، و color grading ، و tone mapping ، و vignette ، و film grain ، 8-bit dithering .

3. أداة Shader Graph

قبل الحديث عن أداة Shader Graph يمكننا التحدث أولاً عن أداة Visual Effect Graph، حيث يمكنك بشكل بصري أن تقوم بصنع نظام جزئيات Particle System معقد ومن صنع تأثيرات على مستوى الشاشة Post Processing أو حتى تأثيرات على واجهات اللعبة UI ، الضباب والمجسمات المضيئة وغيرها من التأثيرات التي تعطي إظهار أفضل Visual Effects كلها يمكن عملها داخل هذا المحرر. وفي هذه النسخة أصبحت هذه الأداة Verified بعدما كانت تجريبية Preview وهي تعمل الآن فقط مع النمط HDRP. ويمكنها التعامل مع أداة Shader Graph كما سنوضح الآن .

أما بالنسبة لأداة الـ Shader Graph ، فإنها ولا تزل مركز للتطوير كونها تفتح أفاق جديدة للمطورين ليقومو ببناء Custom Shader لكي يضعوه على المجسمات في داخل البرنامج، فقد قامو بإضافة vertex skinning لـ DOTS animation ، وأصبح هناك إمكانية لعمل العديد من النسخ static branches بعدما قامو بإضافة الـ Shader keywords ، أيضاً أصبح هناك إمكانية لعمل جمل ملاحظات Sticky notes داخل الـ Shader Graph للتوضيح لتساعد كل من يعمل معك في المشروع على فهم ما قمت بعمله.

4. تحسينات على أدوات الإضاءة

قامت الشركة أيضاً بعمل تحسينات على بعض الأدوات الخاصة بحسابات الإضاءة والظلال، فأصبح الآن بإمكانك دمج نفس الـ Light Probe بأكثر من مشهد الذين يعملون بطريقة المشاهد الترابطية additively loaded Scenes ، هذا يتيح للمطور تقسيم المرحلة الكبيرة إلى مشاهد Scenes صغيرة مترابطة مما يعطي فعالية أكبر للعبة، فبعد دمجهم وتحميل المراحل الصغيرة الجديدة يمكنك الحصول على نفس الحسابات السابقة بطريقة سلسة وبنتائج تعطي واقعية عالية، وتم تحسين حسابات الإضاءة فيها وتفادي بعض النتائج المزعجة سابقاً التي كانت تؤدي إلى ظهور Noise في المجسمات بسبب العدد الكبير للإضاءة.

على صعيد آخر، قامت الشركة بتحسين أداء حسابات الـ Progressive Lightmapper ، فحالياً هناك نوعين يمكنك بواسطتهما حساب خرائط الضوء Lightmap إما بالمعالج CPU أو بكرت الشاشة GPU ، فسابقاً كان التعامل مع ال Editor أثناء هذه الحسابات يعطي عدم أريحية للمطور حيث أنه يلاحظ وجود تقطيع كبير وقلة إستجابة بسبب العمل المستمر على حسابات الضوء، الآن أصبح الأمر أكثر إستقرارية وقابلية للتنقل والتعامل حتى أثناء الحسابات، بالإضافة إلى ميزات أخرى كلها تعمل بشكل أساسي على تقليل الوقت المستغرق وإعطاء نتائج مرضية والتقليل من الـ Noise الناتج أثناء عملية الحسابات.

واجهة المحرر، وأدوات العمل الجماعي

1. واجهة رسومية جديدة

من أهم الميزات الموجودة في هذه النسخة هي المظهر الجديد للمحرك، فقد قامت الشركة بإعادة تصميم كل الواجهة وكل الأيقونات الخاصة بكل شيء، وتغيير نوع الخط المستخدم ليتماشى مع دقة الشاشات الحديثة ويقلل التكسير الناتج من الواجهة القديمة. حيث قامت الشركة بالإستعانة بخبراء الـ UX المختصرة من User Experience لإعطاء راحة للعين وللمستخدم في تنقله في كل أقسام الواجهة الرسومية، التي شملت كل النوافذ الثابتة والمتحركة وكل المحررات الفرعية الداخلية.

وعلى غرار أغلب البرامج الكبيرة، تم الآن إضافة ميزة البحث السريع Quick Search من خلال الضغط على زر Alt + ` (حرف الذال ) والبحث مباشرة عن أي شيء داخل أو خارج المحرك، وهذا من هدفه تسريع عملية التطوير من خلال الإختيار السريع لما يحتاجه المطور أو المصمم.

2. محرر واجهات UI Builder

من أكثر الميزات التي جذبتني شخصياً هي أداة UI Builder ، فكل مطور يدرك تماماً مدى المشاكل التي تنتج بشكل دوري بواجهات اللعبة UI ، فمثلاُ ما أن تقوم بعمل زر في الشاشة وتقوم بتغيير دقة اللعبة إلا وتتغير جميع الواجهة التي قمت بعملها سابقاً، هناك حلول بسيطة يمكن إستخدامها سابقاً، لكنها لا تزال واحدة من أكثر الأمور المزعجة للمطورين والمصممين داخل المحرك، الآن أصبح هناك أداة منفصلة كليا ًويمكن تنزيلها من ال Package Manager تحت إسم UI Builder ، يمكنك من خلالها بناء واجهة رسومية جداً رائعة وجداً متفاعلة مع كل أقسام الشاشة، ليس هذا فحسب، بل يمكنك إيضاً التعامل مع ملفات CSS التي تقوم بإضافة Template لنمط معين ويمكنك إستخدامه للكثير من العناصر بضغطة زر واحدة. وهذه الأداة مخصصة للمصممين الذين يتقنون التعامل مع CSS و الـ UXML .

هناك أيضاً العديد من الأدوات التي قامت الشركة بتطويرها، فقامت الشركة بتحسين أداة ال Package manager نفسها، بدعمها لـ Git repository من خلال رابط، فضلاً عن إمكانية رؤية ال Assets التي قمت بشراءها أو تنزيلها مباشرة منه،

على صعيد العمل التشاركي، قامت الشركة بتطوير Unity Accelerator الذي من هدفه أن يقوم بسرعة عكس التغيرات من شخص بالفريق إلى كافة الأطراف الأخرى، بمعنى رؤية النتيجة التي يقوم بها المبرمج بشكل أسرع لدى باقي الفريق، أيضاً هناك Addressables الذي تسهل تنظيم جميع ال Assets المستخدمة من خلال مسارات معينة داخل اللعبة لإستدعاءها داخل المشروع من أي مكان بالكود، أيضاً قامت الشركة بتطوير AssetDatabase Pipeline من النسخة الأولى إلى النسخة الثانية، المهمة في عملية تنظيم جميع ال Assets الموجودة في المشروع.

المنصات Platforms

1. نظام الإدخال Input System

من أكثر الطلبات الملحة لدى المطورين هي إمكانية تغيير أزرار التحكم داخل اللعبة، فسابقاً كان يمكنك إختيار الأزرار فقط وقت التطوير، ولا يمكن تعديلها بعد أن تقوم بنشر اللعبة، مما كان يدفع البعض إلى شراء Assets مخصصة مبنية لنظام Input System جديد، الآن أخيراً تم حل هذه المشكلة مع أداة جديدة لازالت في وضع التجربة Preview ، وهناك العديد من الميزات التي أنصح بالإطلاع عليها.

أيضاً بهذه النسخة أصبحت أداة Incremental Garbage Collector مستقرة Verified ، الأداة المسؤولة عن إدارة الذاكرة وإزالة أي مجسمات لا حاجة للعبة بها، وأخيراً أعلنت شركة Unity عن دعمها لتصدير ألعابك لمنصة Stadia التي أعلنت عنها شركة Google قبل بضع سنوات.

أدوات أخرى

هناك العديد من المزايا الجديدة أيضاً التي لم يسعفنا الوقت للحديث عنها مثل AR Foundation ، وكيف قامت الشركة بتطوير وزيادة إنتاجية الواقع الإفتراضي VR والواقع المعزز AR ، وأيضاً أداة Device Simulator التي تتيح لك تجربة اللعبة على Emulator لرؤية النتيجة، والعديد من المزايا الأخرى التي يمكن الإطلاع عليها من صفحة الميزات الجديدة لدى الشركة.

إلى هنا نكون قد وصلنا إلى نهاية درسنا على أمل أن نلقاكم في درس جديد إن شاء الله.

post

ميزات 2019.3 Unity – الجزء الأول

النسخة المستقرة الأخيرة من محرك الألعاب Unity خرجت قبل بضعة أيام تحت رقم 2019.3 ، الجدير بالذكر أن الشركة أولت إهتمام كبير في الترويج لهذه النسخة، كيف لا وهي تحتوي على العديد من الأدوات المستقرة الجديدة والتي تحتوي أيضاً على واجهة رسومية جذابة جديدة، وسنحاول في هذا الفيديو أن نلقي الضوء على أهم الميزات الموجودة في النسخة الجديدة، والتي يجب على كل مستخدم للمحرك معرفتها لكي يبقى مواكباً لتطوره.

تم إضافة الميزات للعديد من الاقسام الرئيسية، وسنتناول في هذا الجزء الأقسام التالية :
– التقسيم الجديد لنسخ المحرك، التجريبية وطويلة الأجل
– الأدوات الجديدة للفنانين والرسامين Artist and designers
– الأدوات الخاصة بالألعاب ثنائية البعد 2D Tools

على أن يتم الحديث عن الأقسام التالية في الجزء الثاني وهي:
– الأدوات الجديدة للمطورين Developers
– تحسينات الظهور Graphics
– تحسينات المحرك
– وإدارة المنصات

النسخ التجريبية، والنسخة طويلة الأمد

في البداية، قامت الشركة بتأكيد فصل المحرك إلى قسمين، القسم الأول يحتوي على المحرك الأصلي لوحده الـ Core ، والقسم الثاني هو Packages يتم إضافتها للقسم الأول، بهذه الخطوة يمكنك إستخدام نسخ مستقرة من المحرك أو ما أسموه LTS المختصر من Long-Term Support وإضافة أي مزايا جديده عليه مما يتم تطويره ما بعد إصدار تلك النسخة دون الحاجة لتجديد المحرك في كل نسخة مقبلة، فأي ميزة جديدة ستراها في هذه النسخة ستكون عبارة عن إضافة Package جديدة يمكن تنزيلها من ال Package Manager داخل المحرك، وهنا أيضاً قامو بتعريف النسخ الحديثة والتي تحتوي على نسخ تجريبية بـ TECH Releases حيث سيتم إصدار إثنتان منها كل سنة، على أن يتم إصدار النسخة المستقرة LTS مرة واحدة كل سنتين.

فيديو يشرح نظام النسخ المستقبلية من محرك الألعاب Unity

أدوات جديدة للـفنانين والمصممين

1. أدوات الأرضية Terrain Tools

يمكنك الآن صنع فجوات Hols وكهوف Caves في نظام الأرضية التابع للمحرك، الشيء الذي كان من أكثر الطلبات الملحة من قبل المصممين، حيث أنهم كانو سابقاً يضطرو لنمذجة مجسم الجبل والكهف بشكل منفصل عن Terrain مما كان يحتاج لكتابة أكواد خاصة بما يتعلق بالفيزيائية والأمور الأخرى، الآن أصبح بإمكانك بكل بساطة إختيار Paint Surface Mask tool ومسك الفرشاة والرسم على الـ Terrain كما لو كنت تقوم بتلوينها. والفجوات Holes ستتأثر بكل الأنظمة الأخرى مثل الفيزيائية والـ navigation mesh وحتى خرائط الضوء lightmapping التي ترتبط بشكل أساسي بمجسم الـ Terrain ، ويمكن للمبرمجين الوصول للفجوات والتحكم بها عبر custom terrain logic .

أداة Terrain Tools التي تسمح بصنع فجوات في الأرضية

أيضاً قامو بتحسين رسم التضاريس من خلال أدوات الرسم Terrain Material painting حيث قامو بإضافة 15 أداة للحفر على الـ Terrain لتعطي تفاصيل دقيقة وتقلل من الإعتماد على برامج خارجية قدر الإمكان، هذا كله يمكنك الحصول عليه بإضافة الـ Terrain Tools Package من الـ Package Manager .

أدوات فرشاة جديدة للرسم على الأرضية وإضافة تضاريس عالية الجودة

2. أدوات التحريك Animation Tools

تم إضافة أداة Animation Rigging التجريبية أيضاً إلى الـ Package Manager، حيث أنها تساعد وتسهل من عملية التحريك في الخط الزمني Timeline المخصص لعمل الحركة وهي موجة بشكل أساسي للأشخاص المسوؤلين عن التحريك Animators ، فهناك أدوات الدمج بين حركتين وإضافة الطبقات الخاصة بالتحريك Sequences and Layers لإنشاء حركات جديدة كلياً عن التي أتت عندما قمنا بإستيراد المجسم، والتي ترتبط إرتباط وثيق مع محرر الـ Rig Editor و ال Animation Window لتساعد المحركين من التقليل على إعتمادهم أيضاً على البرامج الخاصة بالتحريك خارج محرك الألعاب Unity.

أدوات منفصلة للمحركين Animator

3. الهئيات المُعَدّة مسبقاُ Presets

الآن أصبح بإمكانك تغيير الإعدادات الأولية default state لأي شيء في المحرك، سواءاً العناصر components او الإستيراد Importers أو حتى الـ Managers ، فمثلاً تريد كل مجسم جديد أن يمتلك خامة ذو لون أحمر بالإضافة إلى كود خاص يأتي عليه مباشرة بعد قيامك بإنشاء هذا المجسم، أصبح الآن من السهل عمله بدون كتابة أي سطر برمجي لذلك. الأمر الذي من شأنه تسهيل عملية التصميم ، وهو أيضاً يساعد في إتخاذ القرار بين تصميمين معينين، فبدلاً من عمل مشهدين بإعدادات مختلفة يمكنك بضغطة زر واحدة تغيير كل المجسمات إلى حالة معينة، وفي النسخة 2019.3 يمكنك عم أكثر من إعدادات أولية، بالتالي يمكن إعطاء مجسمات إعدادات مختلفة حسب إحتياج تصميمك.

تغيير الإعدادات الأولية لأي شيء يزيد من سرعة التصميم

4. خامات من برامج مختلفة renderer materials

في هذه النسخة أصبح بالإمكان الإعتماد على مكتبات خامات Material من خارج المحرك، فهناك الكثير من برامج التصميم التي تمتلك أنواع مختلفة من الخامات بما يتناسب مع البرنامج، وفي هذا النسخة 2019.3 أصبح بالإمكان إستيرادها والتعامل معها مباشرة، والتي ستظهر نتيجة متطابقة مع البرنامج الأصلي دون الحاجة لعمل خامات جديدة متقاربة في المحرك، وهذا يعطي إمكانية أكبر للمصممين على البرامج الأخرى من الإبداع أكثر في الخامات على برامجهم. والأنواع التي يتم دعمها الآن هي: Autodesk Arnold Standard Surface shader, Autodesk 3ds Max physical material, and the Autodesk Interactive shader.

أصبح بالإمكان إستيراد الخامات من البرامج الخارجية دون الحاجة لتعديلها

5. منع إختيار مجسمات معينة Scene Picking

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

إظهار وإخفاء المجسمات أصبح أسهل الآن

أيضاً تم إستبدال الـ grids القياسية بأداة أكثر إنتياجية إسمها ProGrids ، حيث يمكنك إختيار المحور الذي تود إظهار الـ grid عليه وقيمة الإنتقال أو الدوران Snap ، ويمكنك الحصول على هذه الأداة من خلال تثبيتها من Package Manager ثم ستجدها متاحة ضمن قوائم المحرك.

أداة ال ProGrids تعطي تحكم أكبر في موقع المجسمات

6. أدوات DOTS-powered للمصممين

لعل من أبرز ما جاء في هذه النسخة هي إحتوائها على أداتين موجهة للـ Designers تعمل بتقنية الـ DOTS ، و DOTS إختصار لـ Data-Oriented Technology Stack ، ويمكن توضيحها بشكل بسيط على أنها محاولة إستغلال الـ MultiCore Processors لإعطاء أداء خارق خصوصاً على أجهزة الموبايل، والتي تعطي سرعة عالية أيضاً في الحسابات والـ Frame Rate . الأداتان الجديدتان يمكن إضافتهما من خلال Package Manager تحت إسم Entities package ، وهي حالياً تجريبية Preview ، الأداة الأولى Conversion Workflow تقوم بتحويل المجسمات GameObjects إلى entities بضغطة واحدة، والأداة الثانية هي Unity Live Link ، حيث أنه أي تغيير داخل المحرك ينتج عنه تعديل في كل الأجهزة المتصلة معه. للمزيد من التفاصيل يمكن مراجعة الروابط في الأسفل.

أدوات DOTS سرعة خارقة في الأداء

الأدوات ثنائية البعد 2D Tools

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

1. مستورد ملفات الفوتوشوب 2D PSD Importer :

الآن أصبح بالإمكان حفظ ملف الفوتوشوب PSD إلى صيغة PSB وتصديره لمحرك Unity حيث سيقوم المحرك بأخذ جميع الطبقات Layers وبناءها على أنها مجسم واحد لكي تستخدمها في التحريك، وهذه الأداة جداً مفيدة وتحفظ الكثير من الوقت حيث يقوم المصمم بعمل الشكل الكامل للشخصية والمحرك يقوم بتقسيمها ضمنياً ويقوم بربطها معاً مرة أخرى.

نفس الشخصية في الفوتوشوب هي في المحرك

2. التحريك ثنائي الأبعاد 2D Animation :

أصبح الآن من السهل تحريك الصور ثنائية الأبعاد Skeleton 2D Sprite ، حيث بإمكانك إضافة Bones وإضافة وزن لك منها، وبالتالي عمل حركة متكاملة للشخصية، وتم تقديم كل الأدوات التي يحتاجها المحرك Animator لينتهي من الحركة كما لو أنه يقوم بها في برنامج خارجي.

عمل عظام لتحريك الشخصية بسهولة

3. أداة بناء المراحل وأداة تشكيل الصورة:

المحرك الآن يتحوي على أداتين مهمتين في بناء المرحلة أو ما يسمى بخريطة اللعبة World Map ، حيث أن الأداة الأولى هي 2D TileMap Editor ، وتقوم بأخذ مجموعة من الصور ثنائية البعد ورسمها لتبني خريطة لعبة كاملة، فمثلاً تقوم بعمل 3 صور واحدة للعشب وواحدة للتراب وواحدة للماء، وكل ما عليك هو إختيار إحداها وبدء الرسم على المحرك ليقوم هو بنفسه بضبط الصور وتركيبها معاً. والأداة الثانية هي 2D Sprite Shape ، حيث تفيد هذه الأداة في عمل خط طويل من صورة واحدة دون الحاجة لتكرارها في كل مرة، وايضاً يمكنك إختيار صور تقوم بملء الفجوة الداخلية بالتالي تحصل على شكل مناسب الذي إن قمت بعمله يدوياً سيأخذ منك الوقت الكثير عدا عن الدقة المطلوبة في حال كانت يدوية.

الرسم أصبح أسهل مع أدوات الصور ثنائية الأبعاد 2D Tools

4. دقة الصورة ذو النوع Pixel :

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

الصورة تبقى كما هي في حالة دورانها أو تغيير الدقة

أيضاً لازالت الشركة تقوم بتطوير العديد من الأدوات التي يهتم بها مطور الألعاب ثنائية الأبعاد، فهناك تحسينات على الضوء وعلى الظلال المستخدمة من خلال إستخدام خريطة Normal Map ، وأيضاً قامو بإضافة عدد من الأدوات الجديدة مثل 2D Animation’s Sprite Swap التي تجعلك تقوم بتبديل صور من شخصية معينة مع الحفاظ على العظام وتركيبها دون الحاجة لعملها من جديد.

إدوات إضاءة وظلال للشخصية

نلتقي في الجزء الثاني إن شاء الله.

post

تضمين إعلانات Admob داخل Unity

سنأخذكم في هذا الدرس في جولة سريعة لنتعرف معاً كيف نقوم بوضع الإعلانات في ألعابنا ، سواء كانت للـ Android أو لـ IOS ، فنحن كما نعلم أن الإعلانات حالياً هي اكثر مصدر للدخل في الألعاب، و هناك العديد من المزودين الذين بإمكانك بواسطتهم عرض الإعلانات داخل لعبتك ، و سنقوم في هذا الدرس ان شاء الله بالتعامل مع google AdMob

تهئية وعمل حساب على Admob

في البداية هناك أمور يجب أن تكون موجودة مسبقاً ، ألا و هي حساب AdMob ، و إذا لم تكن تمتلك حساب AdMob ، يمكنك بسهولة التوجه إلى admob.google.com و عمل حساب جديد ، بعد عمل حساب جديد ستحصل على واجهة جديدة ، بإمكانك من هذه الواجهة من خلال قائمة الـ Ads إضافة اعلان جديد ، و يجب أن نعلم أنه في كل الإعلانات يجب فصل الـ Android و الـ IOS ، فمثلاً إذا أردت عمل إعلانات لنسخة IOS يجب أن تمتلك ID مختلف عن الـ ID الخاص بنسخة الـ Android ، بعد الضغط على new Ad سيسأل هل اللعبة موجودة على متجر Google Play أو IOS ، سوف نختار لا . في الصفحة التالية سيطلب كتابة معلومات عن اللعبة ، سنقوم بكتابة اسم اللعبة ،و نختار نسخة اللعبة ، (IOS / Android) و سنختار في هذا الفيديو Android و نضغط Add

أهم شيء هنا هو الـ App ID ، بإمكاننا الذهاب إلى App settings و سنجد الـ App ID ، الخطوات موجودة في الرابط https://developers.google.com/admob/unity/start بشكل مرتب ، لاحظ أنه يتطلب منك خطوات متعددة مثل انشاء حساب AdMob

إضافة دوال Admob إلى Unity

يجب أن نقوم بتحميل Mobile Ads Unity plugin ، الذي يحتوي على المكتبة الخاصة بعملية Show Ads و هو موجود في الرابط السابق ، نضغط تحميل و سنجد أن الباقة موجودة و قابلة للتحميل هنا :
https://github.com/googleads/googleads-mobile-plugins/releases/latest

و من Unity سأقوم بالذهاب إلى Assets > Import Package > Custom Package ، و نختار الباقة التي قمنا بتحميلها و نقوم بعمل import لكل شيء ، ثم نقوم بعمل resolve ، نذهب إلى Assets > Play Services Resolver > Android Resolver > Resolve ، عندها ستظهر رسالة تخبرنا باكتمال دمج الباقة ، الآن أصبحت الـ APIs و المكتبة التي تدعم Google جاهزة و متاحة للتحكم ، يتبقى علينا أن نقوم بتغيير الـ Application ID الخاص بنا في منطقة معينة ، Assets/Plugins/Android/GoogleMobileAdsPlugin ، سنجد الملف AndroidManifest.xml ، نضغط الزر الأيمن للماوس و نختار show in explorer ، ثم نقوم بعمل تحرير للملف لتعديله ، نقوم بنسخ الـ App ID السابق و لصقه في مكانه كما هو مذكور في البند android:value ، ثم نقوم بحفظ الملف ، الآن بعد أن قمنا بعمل هذا ، يتقبقى أن نقوم بتفعيل عملية الضغط أو اخراج و عرض الفيديو

<manifest>
    <application>
        <!-- Your AdMob app ID will look similar to this
        sample ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="YOUR_ADMOB_APP_ID"/>
    </application>
</manifest>

تفعيل مكتبة Admob وتهيئتها داخل Unity

نعود إلى الـ Documentation السابق ، نلاحظ أنه يتبقى علينا عمل Initialize للـ Mobile Ad ، نلاحظ أن لدينا 3 أنواع و الإعلانات و هي Banner / Interstitial / Rewarded
– الـ Banner يكون موجوداً طيلة وقت اللعب ، في أسفل أو أعلى الشاشة
– الـ Interstitial يقوم بعرض إعلانات عندما يتنقل اللاعب من واجهة إلى واجهة أخرى (تحميل المستوى أو العودة إلى الصفحة الرئيسية …. الخ)
– الـ Rewarded ، و يقوم بعرض فيديو ، و يتوجب على اللاعب مشاهدته كاملاً ليحصل على الجائزة ،و لا يحتوي على زر اغلاق للفيديو .
في البداية سنتعامل مع النوع Rewarded ، سأذهب إلى حسابي على AdMob ثم إلى Ad units سنقوم بـ create ad unit ، سيطلب اختيار نوع الإعلان ، سنختار Rewarded . في الشاشة التالية يطلب الاسم ، سنكتب أي شيء ، ثم نضغط Create ad unit. نلاخحظ أنه قام بعرض الـ Ad Unit ID ، نعود إلى الـ Documentation ثم إلى Implement rewarded ads لمعرفة كيفية استخدامه
في البداية يجب إن نقوم بعمل Initialize للـMobile Ads فنأخذ الكود ، من اليونيتي سنذهب إلى مجلد الـ Scripts و نقوم بعمل سكريبت جديد ثم نقوم بوضع الكود الذي قمنا بأخذه ، و لاننسى استبدال الـ App ID بالـ ID الخاص بنا ، الان سنقوم بسحب هذا السكريبت و وضعه على أي شيء ليتم تنفيذه مباشرة عند البدء ، الإن بمجرد الضغط على زر play لن يظهر شيء لأننا لم نقم ببرمجة شيء بعد ، و لكن إذا اذا ذهبنا إلى الـ Console سنجد أنه قام بعملية Initialize و هنا لا يوجد أي مشكلة ـ و هذا يطمئننا أن امورنا صحيحة ولا يوجد مشاكل ، بقي علينا أن نقوم بجعل الزر يجعلنا نشاهد الإعلان ، سنعود إلى ال Documentation مرة أخرى ، ثم إلى قسم الـ Rewarded ، لنشاهد كيف يمكننا إظهار الإعلان ، و نلاحظ هنا أننا سنقوم بتعريف متغير من النوع rewarded بحيث أن نقوم بعمل Initialize للـ adUnitId الذي سنستخدمه بعد قليل ، سنأخذ هذا المتغير و هذا السطر ، نلاحظ بعد الـ Initialize الـ Unit ID التي نحصل عليها من صفحة الـ Ad units

ضرورة التجربة بإعلانات Google وليس بإعلاناتك

هنا يوجد قضية علينا الانتباه إليها ، نلاحظ هنا في Google يقول “always test with test ads” ، هذا الكود الموجود هنا سيعرض فيديو من شركة Google ، فعندما تقوم بتجربة الإعلانات لا تضع الكود الخاص بك لأن هناك سياسة في الشركة تمنع المطور من استخدام الإعلانات ، و كأنه يقوم بعرض إعلانات لنفسه ليكسب المال ، و اذا قمت باستخدام كود على جهازك كمطور و قمت بعرض الإعلانات على جهازك ، فهناك إمكانية لعمل lock لحسابك ، و نحن لا نريد هذا الشيء ، إذا سوف نأخذ هذا الكود و نقم بلصقه ، بعد أن نقوم بعملية الاسناد للـ ID نقوم بعمل Request ليقم بعرض الإعلان ، إذاً بعد إضافة الكود الأخير يجب أن نقوم بعمل دوال تفيد في عمل ال Callback للـ Events ، فعندما ينجح أو يفشل الإعلان أو عندما يحصل شيء معين ، يقوم بتفعيل أو استدعاء هذا الـ event ، سنذهب إلى الـ Documentation ، سنجد أنه يوجد العديد من الدوال الموجودة مسبقاً ، سنقوم بأخذها و وضعها في السكريبت الخاص ، بعد أن قمنا بتصحيح الأخطاء ، إذا قمنا بتعريف الـ Rewarded Ads بهذا الـ ID الخاص بـ Google ، و الذي سيعرض لنا شيء خاص بـ Google و ليس اعلاناتنا ، طبعا عند الانتهاء ستقوم باستبداله بشيء خاص بك ، لاحظوا أنه عندما يتم استدعاء الكود بشكل صحيح سيقوم بإظهار الفيديو ، هنا لدينا عندما يتم تحميل الفيديو من الانترنت ، يجب أن نقوم بعمل عرض للفيديو ، فهو يقوم بالتحميل فقط ، فيجب أن نضع جملة شرطية ، عند نهاية التحميل قم بعرض الفيديو ، سنقوم بالحفظ و نعود إلى يونيتي ، بالضغط على زر شاهد سيظهر معلومات أنه لا يوجد أي مشكلة
لزيادة عدد الـ coins التي يكسبها المستخدم نذهب للدالة HandleUserEarnedReward ، في هذه الدالة اللاعب قام بمشاهدة الفيديو كاملاً فيجب أن نقوم بإعطائه coins ، هنا قمنا بتعرف المتغير coins
نذهب إلى build and run لنقوم بتشغيل اللعبة ، نلاحظ أن الـCoins عددها 0 ، بالضغط على الزر شاهد سيقوم بعرض الفيديو، و عند الانتهاء سيقوم بإضافة الـ Coins ، نقوم بالضغط مرة أخرى على الزر شاهد و نقوم بإغلاق الفيديو و نلاحظ أنه لن يقوم بمنحنا الـ Coins ، فيجب على اللاعب انهاء الفيديو ليحصل على الجائزة ، هذا كان بشكل سريع عن كيفية إضافة الـ AdMob داخل اللعبة على محرك الألعاب Unity

الأسطر البرمجية المستخدمة في هذا الدرس

using GoogleMobileAds.Api;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GoogleAds : MonoBehaviour
{
    private RewardedAd rewardedAd;


    // Start is called before the first frame update
    void Start()
    {
#if UNITY_ANDROID
        string appId = "ca-app-pub-3062555098484328~2649488225";
#elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
#else
            string appId = "unexpected_platform";
#endif

        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);
        
        

    }

    public void ShowAds()
    {
        this.rewardedAd = new RewardedAd("ca-app-pub-3940256099942544/5224354917");

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;


        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
        if (this.rewardedAd.IsLoaded())
        {
            this.rewardedAd.Show();
        }
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        GameLogic.coins += 150;

        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }


}

post

لمحة حول ميزات 2019.2 Unity النسخة التجريبية

السلام عليكم ورحمة الله وبركاته ، طرحت شركة unity تسخة تجريبية للإصدار الجديد لمحركها لعام 2019 تحت رقم إصدار 2019.2 ، حيث قامت بذكر أهم الأجزاء التي سيحتويه والتي ستكون مضمنة في النسخة النهائية من الإصدار، حيث سيحتوي الإصدار على الكثير من التحسينات والإضافات الجديدة مثل تحسين الأداء لأجهزة المحمول، وإضافة أداة Polybrush وتسهيل نشر اللعبة على متاجر متعددة بواسطة The Unity Distribution Portal للوصول إلى عدد أكبر من اللاعبين، وتحسين الإضاءة وأدوات الواقع الإفتراضي والمعزز وغيرها الكثير.
يمكن تنزيل النسخة التجريبية من خلال Unity Hub البرنامج المسؤول عن التحكم في النسخ الموجودة في جهازك، مع الأخذ بالحسبان أن هذه النسخة التجريبية قد تحتوي على مشاكل تقنية معينة، حيث تطرح الشركة النسخة ليقوم المطورين بتجريبها وإيجاد أي مشكلة فيها لحلها قبل الإعلان النهائي عن النسخة المستقرة منها.
هنا ذكر لأهم الميزات لهذه النسخة :

تحسينات للأجهزة المحمولة


قامت الشركة بالتعاون مع فريق من شركة Google بتقديم تحسين للألعاب لتبقى على Frame ثابت وهو ما يعرف بإسم Frame Pacing ، وذلك بجعل الفرق بين عدد ال Frames المحسوبة أقل. والنتيجة كانت الحصول على smoother gameplay experience .


بالإضافة إلى ذلك تم تقديم إمكانية تفتيح الشاشة من خلال الخاصية Screen.brightness ، وقامو بإضافة تحديد لحجم الشاشة التي يمكن عرض اللعبة عليها من غير قص منها من خلال خاصية Screen.cutouts ، وهذه الميزة ستكون مفيدة مع الهواتف الجديدة مثل Samsung S10e .

تم إضافة أداة Polybrush


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

مزايا جديدة في إضاءة الـ 2D


تم تحديث وتطوير نظام الإضاءة Lightweight Render Pipeline (LWRP) ، حيث تم إضافة 2D Pixel Perfect وإضافة أنواع إضاءة خاصة بالمجسمات ثنائية الأبعاد، وتم إضافتها أيضاً إلى الـ Shader Graph الخاص بها. وقد تم تفصيل هذا المزايا في مؤتمر GDC 2019


تحديثات الإضاءة


الميزة الخاصة بإزالة ال Noise وبما يعرف بال Denoise الآن أصبحت تعمل على كل الكروت، حيث سابقاً كان بعض الأنواع تعاني منها وبعضها لا يعاني، ايضاً تم تغيير طريقة حساب خرائط الضوء Lightmaps ، حيث بإمكان أي مجسم موجود في المشهد المشاركة في حساب الإضاءة الغير مباشرة global illumination bake ، وتم زيادة سرعة الحسابات خصوصاً إذا تم إستخدام كرت الشاشة في ذلك.

صورة توضح الفرق بين ال Denoising وعدمه
الميزة الجديدة لتفعيل المجسمات من إستقبال الحسابات الخاصة بالإضاءة


أما بالنسبة لتحديثات خرائط الضوء بواسطة كروت الشاشة فهي أصبحت تمتلك الآن :
1 – أكثر من Importance Sampling support لإضاءة المحيط
2 – أصبحت تدعم NVIDIA OptiX denoising
3 – زيادة سرعة الحسابات عندما تستخدم النوع view prioritization او للمجسمات الصغيرة


متاجر عالمية لزيادة اللاعبين


أصبحت يونيتي تدعم بعض المتاجر العالمية لتساعدك بنشر ألعابك عليها وهي ما يعرف بإسم The Unity Distribution Portal (UDP) ، حيث تم التعاقد من بعض المتاجر الكبيرة التي تنافس جوجل ستور وأبل ستور مثل : Catappult/Aptoide, MOO Store, ONE Store, Jio Games Store
مع العلم أن جميع هذه المتاجر تعمل على نظام Android فقط، بمعنى أنك في حال قمت بتطوير لعبة للأندرويد يمكنك ببضع خطوات أن تقوم بإنزال لعبتك على المتاجر المذكورة


AR Foundation


في هذه النسخة هناك العديد من الميزات التي تم إضافتها مثل : face-tracking, 2D image-tracking, 3D object-tracking, and environment probes


هناك العديد من الميزات الأخرى التي يمكنك مشاهدتها في الرابط الأصلي للإعلان عن النسخة هنا :
https://blogs.unity3d.com/2019/05/09/unity-2019-2-beta-is-now-available/