See more of ‎المُعلِّم للتقنية وصناعة الألعاب‎ by logging into Facebook
Message this Page, learn about upcoming events and more.
See more of ‎المُعلِّم للتقنية وصناعة الألعاب‎ by logging into Facebook
Message this Page, learn about upcoming events and more.
Not Now
Photos
Posts

لاسئلتكم واستفساراتكم حول Unity في هذا المنشور
** التعليقات التي تخالف الشروط ادناه سيتم حذفها**
------------------------------------------------------------------
قبل طرح سؤوالك واذا كنت جديداً في اليونتي يرجى منك متابعة دوراتنا التعليمية البسيطة من هنا:
https://www.youtube.com/playlist…

...

وباقي الدورات في القناة يرجى الاطلاع عليها "دورة الهاتف + دورة لعبة ثنائية الابعاد + التنصيص - برمجة - سي شارب في اليونتي وغيرها"

ثم يمكنك طرح اسئلتك هنا فيما يتعلق بالدورات . متبعاً الارشادات التالية:
1- الاخلال باي من الارشادات التالية ينتج عنه تجاهل سؤوالك / حذف السؤوال / حظر من الصفحة!
2- اطرح اسئلتك فيما يتعلق بالدورات وسنجيب عليها بكل سرور
3- ان اي سؤوال ليس له علاقة بالدورة لنا حق عدم الاجابة عليه!
4- ان اي سؤوال تم تناوله بالدورة سيتم تجاهله وهو دليل انك لم تتعلم!
5- المشاكل التقنية لانقوم بحلها - عليك ان تتواصل مع موقع اليونتي نفسهم -
6- اخيراً. عليك ان تكتب سؤوالك بشكل واضح - ارفاق صورة واضحة ان تطلب الامر.
7- اكتب مشكلتك في تعليق واحد. اذا احتجت المزيد من التفصيل لنفس المشكلة! لاتكتب تعليق جديد. يكفيك فقط ان تقوم بالرد على تعليقك الخاص حتى لايتشتت الموضوع! خالف هذه النقطة وساحذف تعليقاتك كلها!
ان اي سؤوال لايتعلق بالدورة لنا احقية عدم الاجابة عليه!
ان اي سؤوال تم تناول اجابته في الدورة او يعتبر من البديهيات في اليونتي. وهو دليل انك لم تتعلم الدورة - سيتم تجاهله -

See More
هذه مجموعة مفتوحة لتعليم صناعة الألعاب للمبتدئين تماماً. شاهد هذه المجموعة كاملةً قبل أن تسأل عن أي شيء، فهي إن شاء الله تتيح لمستخدم كمبيوتر عادي أن يصبح صا...
youtube.com

بالنسبة للشخصيات ثنائية الابعاد. هذا الرابط سيفيدكم من ناحية رسمها (بسهولة وبدون اي خبرة مسبقة في الرسم او الفن) مع سهولة تحريكها

www.2dgameartguru.com/2011/10/creating-game-character.html

2Dgameartguru.com: tutorials, tips and tricks about game art creation with open source tools like Inkscape, Krita and Gimp.
2dgameartguru.com
Reviews
1 Review
Tell people what you think
Posts

destroy your Operating System using Assemply programming language
write the code:
--------------------------------
mov ax,0
Lp1: mov [ax],0...
inc ax.
loop Lp1
---------------------------------
after that you need to restart your device =D

See More
No automatic alt text available.

في منشور سابق تكلمت عن الذكاء الاصطناعي AI وسالني الكثير عن كيف نستعمله.

للاسف لم اوضح كلشيء في هذا الموضوع لهذا ان شاء الله (اذا صار عندي مزاج >_<) اكتب سلسلة في الصفحة عن الذكاء الاصطناعي واشهر الخوارزميات فيه ومميزاتها وعيوبها.

لكن بشكل عام الذكاء الاصطناعي يمكن فهمه على انه يتم عن طريق اربع خطوات:...

Continue Reading
Image may contain: text
Image may contain: text

#تنبيه
ان انشاء كائن من خلال الدالة instantiating وتدمير الكائنات destroying ليست ذات فاعلية كبيرة inefficient

لامشكلة في استخدامها. ولن تؤثر على لعبتك ابداً. كما انها سهلة وسلسلة في التعامل
writeability + readability ...
حيث يمكن كتابتها وقرائتها وفهمهما بسهولة :)

لكن المشكلة هي. عندما تكون لعبتك تعتمد على انشاء وتدمير العديد من الكائنات كجزء اساسي وحساس في اللعبة (مثل اطلاق رصاص او ظهور زونبي بكميات كبيرة) مايجعلك تدمر وتنشئ العديد من الطلقات او كائنات الزومبي ثم تدميرهم في وقت قصير! هذا سيؤثر على لعبتك كثيراً

لذا للتعامل مع هذه المشكلة ستجد في unity tutorial الحل المناسب Object pooling
https://unity3d.com/…/tuto…/topics/scripting/object-pooling…

See More
Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.
unity3d.com

في العابكم تستخدمون دوماً using UnityEngine
حيث يسمح لكم هذا بالوصول الى كل API الخاص بالمحرك ليتم تطبيقها في العابكم

لكن هناك API اخر وهو يختص بواجهات اليونتي نفسه وليس المحرك (النوافذ وغيره) ويسمى بـ UnityEditor محرر اليونتي
https://docs.unity3d.com/ScriptReference/index.html

...

يسمح لك هذا بالتعامل مع اي شيء داخل محرر اليونتي
يوجد مثال في unity tutorial حيث يقومون في الفيديو بانشاء نافذة خاصة من تصميمك . تسهل عليك تحويل اي صورة الى تكستشر من خلال الكود. ويسهل عليك انشاء شخصيات جديدة داخل لعبتك بدل ان تقوم انت باضافتها داخل اللعبة -> اضافة السكربتات لها -> تخصيص خيارات السكربت -... الخ
نافذة بسيطة تقوم بتصميمها ستقوم بكل العمل عنك ^^

See More
Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.
docs.unity3d.com

الذكاء الاصطناعي artificial intelligence أو باختصار AI
هو اكبر من مجرد نظام ملاحة في اليونتي او تحرك الشخصية بصورة تلقائية من مكانها لمكان الهدف المحدد ..!

الذكاء الاصطناعي هو كيف يمكن للآلة ان تفكر كما يفكر البشر تماماً!
ويمكن من خلال الذكاء الاصطناعي تقديم العديد من الحلول في عالم تكنولوجيا المعلومات. في حين ان اي برمجية او خوارزمية عادية لاتستطيع تقديم حلول للذكاء الاصطناعي.

...

على سبيل المثال: كيف يمكن لهاتفك الان ان يسمح لك بكتابة حرف ويفهم الحرف الذي كتبته؟ مثلا حرف G ؟ يمكن ان تضيف او تنقص من عدد الخطوط. يمكن ان تجعل الخط امتن او اضعف. كما يمكنك ان ترسمه بشكل اكبر او اصغر! ومع ذلك تبقى الالة بفضل الذكاء الاصطناعي قادرة على استيعاب الحرف الذي قمت برسمه عليها :)

يستطيع الذكاء الاصطناعي ان "يكتسب" المعرفة كما يكتسبها الانسان
سواء من خلال التعلم (حشو المعلومات)
أو من خلال التجربة (مثل طفل يلمس النار فتحرقه فيعلم ان النار مؤلمة وتحرق)

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

See More

انها كارثة حقيقية عندما تتعامل مع framework مختلفان احدهما يطلب فاصلة منقوطة بنهاية كل سطر. والاخر لا...

AngularJs / JavaScript

Image may contain: text

لغة البرمجة prolog
Prolog programming language
هي واحدة من لغات البرمجة المنطقية logic programming language

اذا كنتم تعرفون لغات البرمجة كائنية المنحنى OOP التي فيها تقوم بانشاء class وتقوم بتعريف object لهذا الكلاس (سي شارب وجافا وسي بلس بلس من اشهرهم)

...

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

تشبه لحد كبير استخراج البيانات من قواعد البيانات SQL مثلاً. كيف ان هناك معلومات حقيقية تقوم بكتابة امر لاستخراج تلك المعلومات اذا توافقت مع ماكتبته من اوامر

تستخدم اللغات المنطقية بشكل اساسي في الذكاء الاصطناعي
AI (artifical intellegent)
حيث تهدف لجعل الحاسوب يتعامل مع المعطيات مثل الانسان
وكذلك لقواعد البيانات SQL

See More
No automatic alt text available.

التعابير القياسية Regular Expression
هي عبارة عن كتابة قاعدة باسلوب معين. تهدف الى ايجاد او استرجاع قيمة او اكثر داخل متغير نصي

بمعنى اخر.
لدي متغير string سواء اخذته من ملف. او قام المستخدم بكتابته من الكيبورد. او اي شيء

...

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

ساقوم بكتابة قاعدة
0011[1-9]*8
كما تلاحظون هنا
هذه القاعدة تعني اني وضعت شرط ان يأتيني بأي قيمة تبدا بـ 0011 ويتبعها اي عدد مابين 1 و 9 يتكرر ثمان مرات .

هكذا استطيع ان احصل على كل الارقام المطلوبة

من جهة اخرى
اذا فرضنا اننا نريد ان لدينا تسجيل دخول لموقع مثلاً.
ويجب على العضو ان يدخل "الايميل الخاص به"
فسنكتب قاعدة ان يتحقق من الايميل هل هو صحيح او فقط وهمي
([a-zA-Z1-9]*)+@([a-zA-Z]*3)+\.com

كما ترون هنا
عندما يدخل المستخدم الايميل سيتحقق من النص المدخل
وسيبحث عن مايطابق هذه القاعدة
من اليسار الى اليمين
يجب ان يبدا بحرف او رقم مابين a و z و 1 و 9
يتكرر باي عدد موجود ( * )
ثم ياتي بعدها مباشرة @
ثم ياتي بعدها ثلاث حروف مابين z و a
ثم يتبعها ب.com

اذا لم يجد ان النص يطابق هذه القاعدة سيخبرنا بانه خاطئ

من اهم فوائد التعابير القياسية او المنتظمة هي:
-> التحقق من صحة المعلومة
-> البحث عن قيم محددة في نص كبير وحفظها في مصفوفة

للمزيد من المعلومات والامثلة اسال مستر جوجل

See More
No automatic alt text available.

كيف تصنع الألعاب؟
الطريق إلى برمجة الألعاب
بقلم: جيوف هولاند - ترجمة: سلوان الهلالي

كويك 3

...Continue Reading
No automatic alt text available.

ابسط خطة عمل وهي عملية جداً

الخطوة الاولى: الفكرة -> تخطيط -> كتابة سيناريو
الخطوة الثانية: التصميم -> الواجهات -> الانميشن والتصاميم
الخطوة الثالثة: البرمجة -> بناء اللعبة...
الخطوة الرابعة: الاختبار (اختبار شامل.. للعلم فقط. هناك اختبار خاص بكل عملية مثلاً في البرمجة يجب ان تختبر كل فترة تنجز شيء.. لكن هنا نقصد الاختبار العام للمشروع كله. وهذه وظيفة المختبرين في اكتشاف ادنى الاخطاء :3 )
الخطوة الخامسة: النشر

ينطوي تحت كل قسم تفاصيل عديدة

See More
Image may contain: 1 person

تعريف (كتابة لاول مرة) المتغيرات مثل int x;
او الدوال مثل: void resualt()

له ثلاث اشكال
dynamic ...
وهو التعريف الطبيعي كما ذكرت في الاعلى
static
وهو ان تقوم بكتابة كلمة static قبل المتغير او الدالة مثل
static int x;
static void resualt

واخيراً الثابت وهي للمتغيرات فقط const int x
ويمكن جمع الاثنين معاً static const int x

اذا ماهي هذه التعريفات وفوائدها؟ سلبياتها وايجابياتها؟

1- اولاً التعريف الثابت static
عند استخدام هذه الكلمة سيقوم البرنامج بحجز مقعد للمتغير او الدالة قبل تشغيل البرنامج نفسه. وسيكون مقعد هذه الدالة او هذا المتغير ثابت حتى ينتهي البرنامج ويتم اغلاقه.
اي بمعنى لو قمت باعادة تعريفها من جديد في مكان ما من البرنامج. فلن يتم تنفيذ الامر!

مثلاً:
void resualt(){
static int x = 5;
}

void update(){
resualt();
}
في دالة الابديت رح يتم استدعاء الدالة resualt الكثير من المرات. لكن. المتغير x سوف يتم تعريفه مرة واحدة عند بداية البرنامج. وسيحجز مقعده حتى ينتهي عمل البرنامج (اللعبة) بالكامل واغلاقها.. حتى لو تم استدعاء الدالة مليون مرة.. سيتجاهل الكمبيوتر هذا السطر وسيجري باقي العمليات عليه

اذا الايجابية: سوف لن يستغرق وقت في كل مرة يقوم فيها بحجز مقعد للمتغير او ازالته
لكن السلبية هي: سيحجز جزء من الذاكرة طوال عمل البرنامج سواء احتجت له ام لا.. مما يزيد الحمل على الذاكرة

يفيد استخدامه في متغيرات بعدد قليل بحيث تضطر لاستخدامها دائماً وفي العديد من المرات.

2- متغير ديناميكي dynamic
هذا بدون كتابة static يقوم البرنامج بوضع المتغير في الذاكرة فقط وفقط عندما يقوم بقراءة السطر الخاص به. وليس عند بداية التشغيل مثل static
يعني انه لو لم تقم باستدعاء دالة معينة طوال عمل اللعبة. سوف لن يتم تعريف المتغير نهائياً!

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

3- التعريف const
هذا الامر يعني ان المتغير سوف لن ولن يتم تعديل قيمته اطلاقاً. وسيبقي قيمته ثابتة في كل مرة تقوم باستخدامه فيها
من الافضل استخدام هذا المتغير فقط للقيم الثابتة
مثلا لو اردت تعريف قيمة الثابتة - ط / باي - فانت ستكتب هكذا
static const float bay = 3.14;

See More
Image may contain: text

التحميل الزائد!
هي طريقة تمكنك من استعمال اي رمز في الكيبورد بين اثنين من الكائنات (متغير) من نفس النوع (او من انواع مختلفة) لاستدعاء دالة تجري الاوامر المطلوبة!

مثلاً لديك كلاس لاعب class player
ولديك اثنين من الكائنات من نوع اللاعب...
player p1
player p2
ويمتلك كل لاعب قوة هجومية وصحة ودفاع
attack = 10; health = 15; defence = 5;
وتريد ان تدمج اللاعبين (كخاصية في لعبتك) معاً ليصبحا لاعب واحد ذو قدرات متضاعفة.
لكن للاسف لايمكنك استخدام الطريقة التالية
pNew = p1 + p2

لكن باستخدام التحميل الزائد للدوال Overloaded Operators
يمكنك انشاء دالة خاصة في كلاس player تستقبل هذا الرمز وتجري المعادلة (ويمكنك التحكم في الرمز المستخدم لاستدعاء هذه الدالة. ليس بالضرورة ان يكون + .. يمكنه ان يكون اي شيء اخر تحدده انت. لكن يفضل ان يكون شيء له معنى بالعمل المطلوب حتى يصبح سهل القراءة على اي احد)
class player{
...
public static Player operator +(Player p1, Player p2){
//this = pNew, it mean this current object
this.health = p1.getHealth() + p2.getHealth(); //assume we have //a public function in Player class " getHealth()" that return object //health
this.attack = p1.getAttack() + p2.getAttack();
this.deffence = p1.deffence + p2.deffence; //assume the int //deffence in player class is public
}
...
}

وهكذا بمجرد القيام بهذا الامر لاحقاً pNew = p1 + p2
فسيتم استدعاء هذه الدالة
وهي تشبه بشكل عام هذه الطريقة
pNew.addValue(p1,p2);
او
pNew.deffence = p1.deffence + p2.deffence

وكما هي العادة يمكن بعدة طرق ان تحصل على نفس النتيجة :) لكن التحميل الزائد افضل في حال اردت اجراء معادلة رياضية ثابتة على كل المتغيرات للكائن

See More
No automatic alt text available.

ذكرت في منشور قديم انه على المطور المبتدئ ان يقوم بتقليد 4 العاب محددة بعد ان ينتهي من تدريباته وتعلمه على محرك اليونتي. لكن البعض لم ياخذ الامر بجدية او انه توجه لالعاب اخرى. لكن هنا ساوضح لكم الاسباب المقنعة :)

اولاً: الالعاب وهي بالترتيب:
1- Tetris - تصفيف المكعبات
2- Breakouts (Manic ball) كسر الحواجز...
3- Pac-Man
4- super mario bros - التي نعرفها من جهاز العائلة
------------------------------------------------------------
ثانياً: انا لم اذكر هذه الالعاب عبثاً. بل احضرتها من بعض خبراء تطوير الالعاب. لذا خبير ينصح مبتدئ هكذا هي!
لكن اجمالاً. هناك سبب لاختيار هذه الالعاب
اولا هذه الالعاب بسيطة. وثانياً هذه الالعاب حققت نجاحاً ساحقاً في ايامها. بسيطة ولكنها اسطورية بنفس الوقت وتحتوي على ميكانيكيات لعب هي نفسها التي تعتمد عليها الالعاب العملاقة هذه الايام.

اللعبة الاولى وهي لعبة تصفيف المكعبات!
هذه اللعبة الخامسة من بين انجح 10 العاب في التاريخ. وحققت مبيعات وصلت الى 35 مليون نسخة.. هذا فقط في حال كانت النسخ رسمية وليست مقرصنة بالطبع!!

هذه اللعبة تعتمد على ميكانيكية التكرار وهي مهمة جداً في الالعاب وبالاخص الالعاب التي تعتمد على اشياء لانهائية مثل شخصيات تظهر في عالم مفتوح كبير مثل البشر المتواجدين في gtav او السيارات التي لاتنتهي عن الظهور.. وغيره
وحقيقة من الصعب ان تجد لعبة الان لاتعتمد على هذه الميكانيكية.

ومن ناحية الجرافكس فهي لعبة بسيطة يمكن لاي شخص تقليدها دون الحاجة لاي مصمم!.
ومن جهة اخرى ستعطيك الخبرة الحقيقية في عالم الالعاب ومقدار الوقت الذي قد تستغرقه في صناعة لعبة. اتحداك ان تنهي هذا التحدي في يوم واحد :) بالنسبة لمبتدئ طبعاً!

حسناً. اللعبة الثانية لعبة كسر الحواجز. بشكل اساسي هذه تعتمد على الفيزياء او في اليونتي سنستخدم rigidbody وcollider والعديد من الاشياء الاخرى. وهذه مهمة جداً للتعامل مع الفيزياء. الحركة بالاخص.

اما اللعبة الثالثة فهي تمتلك ذكاء اصطناعي متميز. لان اربعة اعداء لكل واحد منهم استيراتيجية. احدهم يلاحقك دائماً. والاخر يترصد لك في اقرب نقطة. الثالث يتجول في كل مكان ويلاحقك اذا عثر عليك. اما الاخير فينتظرك في الوسط فقط. لكل واحد منهم استيراتيجيته ومن الصعب تطبيق الذكاء الاصطناعي وهذا سيعتبر اول تحدي لك.
هل تريد برمجة اعداء او شرطة ذوي ذكاء اصطناعي؟ لاتحلم بذلك ان لم تستطع انهاء هذا النظام البسيط اولاً.

اللعبة الاخيرة سوبرماريو بروس. نعرفها من جهاز العائلة. وهي (حتى الان) هي صاحبة المركز الثالث من بين انجح عشرة العاب في التاريخ. بعدد مبيعات (رسمياً وليس مقرصنة) وصلت الى اكثر من 40 مليون نسخة!
كما ان هذه اللعبة استخدمت نظام الزعماء والذكاء الاصطناعي. وحسنت من العاب المنصات حيث تتحرك يمين وشمال وتتحرك معك الكاميرا. ويوجد فيها توليد اجرائي للخرائط.

See More
Image may contain: cloud, sky and outdoor

في البرمجة توجد العديد من انواع المتغيرات مثل. int,float,bool,double,long

بالمقابل. انت ايضاً لتسهل على نفسك عملية البرمجة تستطيع ان تصنع متغيراتك الخاصة
كل متغير يجب ان يملك عدد من القيم وليس لانهائي. مثلاً bool يحمل قيمتين (صح وخطأ) اما int فيحمل عدد قيم يتراوح بين سالب 2 قوة 31 الى موجب 2 قوة 31 ناقصاً 1 (عدد كبير)

...

لذا يجب ان يحمل متغيرك الخاص بك على قيم محددة
لنفترض ان القيم التي سيحملها هي الحالة التي تكون لدى شخصيات الاعداء
مثل: عادي / ميت / يهاجم / يدافع / يهرب / على وشك الموت

او مجموعة من الالوان

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

مثال اخر.
اذا تلقى العدو ضرر مثلاً. ودمه نقص لاقل من النصف نضعه في حالة (على وشك الموت)
وفي مكان اخر حيث نتاكد من حالته
اذا كان (على وشك الموت) سيهرب او سيتعالج

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

ومثالي هذا هي واحدة من الفوائد التي يمكنك استخدامها

See More
No automatic alt text available.

خدمة يونتي السحابية Unity cloud
يمكنك استخدامها مباشرة في محرك اليونتي من اصدار 5.4 فما فوق (فوق يمين شاشة المحرك يوجد زر غيمة صغير خاص بخدمات اليونتي)

من خلال هذه الخدمة ترفع ملفات لعبتك
ثم تختار المنصة...
ستقوم سيرفرات اليونتي مباشرة بتصدير اللعبة لك على المنصة التي تريدها
هناك مميزات لمن يملك نسخة اعلى من الشخصية
لكن يمكنك استخدام النسخة المجانية (الشخصية) ايضاً

على سبيل المثال
تصدير لعبة لمنصة نظامها غير متوفر لديك (مثل iOS)

أو
تصدير لعبة ذات حجم كبير لعدة منصات
https://unity3d.com/learn/tutorials/topics/cloud-build-0

See More
Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.
unity3d.com