Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

ورشة عمل لعبة من نوع Shoot 'em Up

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

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

    اترك تعليق:


  • لا اعلم
    رد
    موضوع رائع الي ابعد الحدود وافادني كثيرا خصوصا وان معلوماتي عن المحرك الجديد تحتاج تحديث
    موضوعك يستحق التثبيت وان يكون من ضمن المواضيع المثبيته
    اعجبني الشرح والصور بالموضوع كذلك شخصكم اسلوبكم في الردود عالاعضاء بارك الله فيك و وفقك لمئ يحب ويرضئ
    وتقبل تحياتي

    اترك تعليق:


  • MohammadT3d
    رد
    الحمد لله الذي نالت الورشة رضاك وافادتك، وهنالك ورشات قريبة ان شاء الله ستناقش المواضيع المتقدمة في اليونيتي والتي نادراً ما تم تغطيتها باللغة العربية.

    اترك تعليق:


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

    اترك تعليق:


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

    اترك تعليق:


  • EMAD_ARIF
    رد
    اشكرك اخي على اردود الرائعة صراحة استفدت منك و الى الان مازلت اقراء كتابك و صراحة في اشياء ما فهمتها لانة ماعندي فكرة عنها ياريت تعمل كتاب يشرح الدواف و و امتغيرات الي تطرق لها المبرمجين و شكرا

    اترك تعليق:


  • MohammadT3d
    رد
    بالنسبة لسؤالك عن نظام الحفظ، فإنك يجب ان تفهم الموضوع بشكل اكبر، الامر كله يعتمد على عملية ال ......ize، يعني حفظ الفئات الخاصة ب على شكل بايتات (او اشكال اخرى) كي تقوم بنقلها مثلاً او تخزينها او استعادتها لاحقاً، ويوجد في السي شارب عدة انواع من ال ......ization واشهرها ال Binary (التحويل الى بايتات) وال XML (التحويل الى ملف XML) وال SOAP (معيارية محددة لل XML).
    المهم، الاشهر في اليونيتي هما ال Binary وال XML ويتم استخدام فئات مثل System.Runtime.......ization.Formatters.Binary.BinaryFormatter او System.Xml.......ization.Xml......izer كي يتم تحويل الكائن الى الصيغة المخصصة.
    للاسف فإن الموضع طويل ويحتاج الى مقالة كاملة قد اقوم بها في المستقبل، ولكن من الافضل ان تجرب الامر في السي شارب لوحدها خصوصاً ان المصادر على الانترنت وافرة عن ال ......ization في السي شارب (كبداية عليك بال MSDN) ومن ثم طبق الامر على اليونيتي، ولكن لا تخف الموضع سهل، بالتوفيق.

    اترك تعليق:


  • MohammadT3d
    رد
    صراحة انا درست لغة السي شارب بشكل كبير ومن بعدها انتقلت الى اليونيتي واجدها الطريقة الافضل لاحتراف اليونيتي.

    اترك تعليق:


  • MohammadT3d
    رد
    ان شاء الله تكون قد فهمت جميع المواضيع، واتمنى منك ان تستخدم هذه الامور لأنها ستسهل عملك كثيراً.
    بالنسبة لكمية الاستهلاك فالامر لا يعتمد على النسبة المئوية بل على الثواني، فمثلاً 90 بالمئة من 1 ميلي ثانية هو مقدار بسيط جداً، هذا امر، امر آخر هو ان عملية ال Rendering وعمليات الفيزياء قد تكون بسيطة في اللعبة (رغم انها تأخذ 73 بالمئة) ولذلك سيكون من العادي ان تأخذ Update نسبة كبيرة (لاحظ انني اقول نسبة وليس وقت)، اما بالنسبة لضعف المعالج فإن هذا الامر غير وارد لأنه اذا كان المعالج ضعيف فإن كل العمليات سيزداد وقت تنفيذها.
    على كل حال كما قلت لك، اولاً تأكد من الوقت فقد يكون وقت الفريم قصير جداً وبالتالي من الطبيعي ان تزداد النسبة، ومن ثم قم بعمل بروفايل detailed للسكريبتات واستكشف اين يضيع الوقت فقد يكون هنالك دالة تستهلك وقت كبير او ما شابه.

    اترك تعليق:


  • EMAD_ARIF
    رد
    سؤال انت دارس لغة برمجة قبل كدا ؟

    اترك تعليق:


  • EMAD_ARIF
    رد
    الف شكر على الاجوبة صراحة افدتنا كثير , للعلم فقط انا اعمل على لعبتي و ما ولجهتنا اي مشاكل مع العلم اني استخدم الدوال الطبيعية الموجودة معي Start و Update و ما استخدمت اي دالة ثانية كـ IEnumerabler حتى اني ما استخدمت foreach ولا return , حابب استفسر عن شيئ انا اعمل على لعبتي في جهاز لابتوب صعيف نسبياً لكن لا بأس رغم ان العمل يجري بشكل بطيئ في البرنامج بسبب ضعف الجهاز , لكن لما عملت فحص للدوال و اي الدوال تحسب اكثر ظهر ان دالة Update تأخد 27% من total , حالياً ما عندي فكرة عن هذا و المشكلة الكبرى ان الانترنت هو العائق الرئيسي بيني و بين الدروس , لكن انا دائماً ارجع الى اسكربتينج اليونتي و اقرا الدوال و المتغيرات دائماً ما ادخل الى الموقع لكن بعض الدوال اجد انة مالها شرح تفصيلي , حابب استفسر لو عندك فكرة عن نظام حفظ الملفات Bin طريقة استخدامة في اليونتي , لاني قبل كدا استخدمتة علشان احفظ الاسكورات و ما عمل و للعلم اني شفت فيديوهات في النت و الاحظ ان بعد استخدام نظام Bin تظهر ملف بأسم Bin بعد تصدير اللعبة !

    اترك تعليق:


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

    السؤال الثاني: في الصفحة 18 ستجد شرح مفصل ل Fixed Update والفرق بينها وبين ال Update وإن احتجت الى معلومات اكثر فسأجيبك.

    السؤال الثالث: foreach هي حلقة تكرارية في لغة السي شارب، ووظيفتها الدوران على جميع عناصر Container ما مثل مصفوفة او List (ولنكن ادق على اي فئة تطبق ال IEnumerabler)، واحد واحد لذا لا حاجة لوضع سقف علوي مثل ما نفعل في حلقة for، ولكن foreach لا تسمح لك بالقفز على عناصر محددة من خلال تحديد قيمة المتغير i مثل حلقة for، كما انها تمشي بشكل خطي موجب يعني (n+1) فلا يمكنك العودة للخلف، ولكنها ببساطة مريحة جداً في حال احببت الدوران على جميع عناصر container ما، وهذا شكلها:
    كود:
    int[] myInts = {4, 52, 23, 524, 1};
    
    foreach(int myInt in myInts)
    {
    	Debug.Log(myInt);
    }
    كما تلاحظ سييتم الدوران على جميع العناصر دون الحاجة منك ان تدخل عدد العناصر او ما شابه وسيتم طباعة قيمة كل عنصر لكونسول اليونيتي.
    ولكن في اليونيتي يوجد مشكلة في حلقة ال foreach لذا لا يجب استخدامها ووضحت ذلك في القسم قبل الاخير من الورشة واوضحت عيوبها على الاداء.

    السؤال الرابع: في الصفحة نفسها ذكرت ما هي الدالة، ولكن ربما الشرح موجز، المهم هذه الدالة تسمى Coroutine وهي دالة يمكنك ايقاف تنفيذها لمدة معينة وهو مالا تقوم به الدوال العادية فإي دالة متى ما استدعيتها لا يمكنك ايقافها.
    يتم ايقاف ال Coroutine عن طريق yield return ويتم تحديد مدة الايقاف بالعبارة التي تأتي بعد ال yield return فاذا كانت null فيعني ان توقف التنفيذ لمدة فريم واحد، بينما WaitForSeconds توقف التنفيذ لعدد محدد من الثواني انت تحدده، ويوجد غيرهم، وبالنسبة لشاشة التحميل فقمت بوضع مثال كامل عن عمل شاشة التحميل ستجد في فقرة شرح قوائم اللعبة، وفي الواقع ما كان ممنوعاً في اليونيتي 4 هو الدالة LoadLevelAsync وليس ال Coroutine.
    كي تحترف ال Coroutines قم بتجربتها عدة مرات وبعدة اشكال وابحث عن امثلة، فهي بسيطة جداً ومفيدة جداً.

    السؤال الخامس: كل دالة في السي شارب يمكن ان تعيد قيمة، يعني لنقل بأنك تعطيها بيانات، فتعالج البيانات ومن ثم تعيد لك نتيجة المعالجة، كأبسط مثال دالة الجمع تعطيها رقمين فتعيد لك ناتج الجمع. المهم في السي شارب الدالة يمكن ان تعيد شيء او يمكن الا تعيد، ونوع الاعادة يتم وضعه في تعريف الدالة:
    كود:
    returnType methodName (arguments)
    {
    	
    }
    الآن void تعني بأن الدالة لا تعيد شيء، int يعني بأنها يجب ان تعيد عدد صحيح وهكذا. جملة الاعداة تكون باستخدام كلمة return وبعدها قيمة الاعادة والتي يجب ان يكون نوعها مماثل للنوع المحدد في تعريف الدالة.
    خذ مثال الدالة Vector3.Distance والتي تعيد لك float لاحظ تعريفها:
    كود:
    public static float Distance(Vector2 a, Vector2 b);
    كما تلاحظ فإن نوع قيمة الاعادة هو float، فأنت ببساطة تعطيها متجهين وتعيد لك المسافة بينهما (باعتبار كل متجه سيمثل نقطة).
    لاحظ هذا الكود:
    كود:
    float distance = Vector3.Distance(point1, point2);
    الم تلاحظ كيف ساوينا بين متغير ودالة، والسبب اننا ساوينا بين المتغير والقيمة التي تعيدها لنا الدالة. ببساطة راجع اكوادك وستجد كيف ان الكثير من الدوال تعيد والكثير ايضاً لا تعيد شي يعني void وستفهم الامر تماماً.
    ملاحظ اخيرة هي ان return يجب ان تكون آخر جملة لأنه لن يتم بعدها تنفيذ اي سطر لذلك يضعها المبرمجون في دوالهم للخروج من التنفيذ عند حصول شرط معين مثلاً:
    كود:
    public void Movement()
    {
    	if(isDead)
    		return;
    	
    	//Move the player
    }
    اذا واجهتك المزيد من الاسئلة فلا مشكلة على الرحب والسعة اسئل قدر ما تشاء، واذا لم تفهم تماماً نقطة ما او عدة نقاط فساشرحها لك بتفصيل اكبر ان شاء الله.

    اترك تعليق:


  • EMAD_ARIF
    رد
    اوك مش مشكلة , راح اطرح عليك الاسئلة تبعي هنا اصلاً في متغيرات ماعندي فكرة عن طريقة استخدامها في اليونتي رغم اني مريت عليها .
    السؤال الاول : انت استخدمت Mathf.Atan2 علشان تظهر ال tan الموجود بين المحوري x,y اي انك تظهر الوتر , و صراحة استخدامك كان مضبوط 100% مع العلم ان درس دائرة الوحدة و عارف استخرج الوتر بس في البرمجة ماعندي فكرة , و عرفت من خلال شرحك ان Red2Deg هو المتغير الي ينقلك من وحدة الراديان الى الدرجات , سؤالي هنا كيف اعرف ان الراديان راح يعملي مشكلة في الحركة اي لو ما استخدمت Red2Deg وش الي كان راح يحصل ؟؟

    سؤالي الثاني : الصراحة انا ماعندي فكرة كبيرة عن استخدام دالة FixedUpdate , للعلم اني قرات عليها و عرفت انها تستخدمت للتعامل مع متغيرات Rigidbody , لكن ياريت تعطينا فكرة اكبر عليها .

    سؤالي الثالث : صراحة ماعندي فكرة كبيرة عن foreach مع العلم اني استخدمتها لعمل ContectPoint في لعبة اي اني استخدمت كلاس ContectPoint فيها بغض النظر عن فهم طريقة عمل الجملة لاني نقلتة من فيديو بشكل مباشر ...

    سؤالي الرابع و الاهم : لاحظت في الصفحة 38 في برمجة صحة العدو انك استخدمت دالة IEnumerator صراحة انا شفت فيديو في اليوتيوب من موقع اليونتي ان دالة تتيح لك عمل تحمل لل Load قبل الدخول الى اللعبة يعني مثلاً انا حالياً العب في المستوى الاول هو في نفس الوقت يحمل المستوى الثاني علشان ادخلة بسرعة , للعلم اني استخدمت اللدالة في يونتي 4 و طلب مني استخدام يونتي برو علشان تعمل الدالة و حالياً استخدم يونتي 5 و الدالة شغالة بس ياريت تعطينا فكرة عن آلية عمل الدالة و ليش انا استخدم yield return في نفس الوقت فيها .

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

    و اشكرك الف شكر على هذا الكتاب الجميل و ياريت لو تعمل كتاب تشرح فيه المتغيرات و الدوال الي ما نفهمها علشان تعم الفائدة الجميع .

    اترك تعليق:


  • MohammadT3d
    رد
    اخي عماد صراحة لا امتلك حساب فيسبوك ويمكنك التأكد من ذلك في مدونتي حيث وضعت حساب التويتر فقط، ولكن ان لدي بريد gmail يمكنك التواصل معي من خلاله عن طريق Hangouts، ولكن اذا كانت الاستفسارات حول الورشة فيفضل ان نضعها هنا كي يستفيد الجميع.
    بريدي: mohammadT3d@gmail.com

    اترك تعليق:


  • EMAD_ARIF
    رد
    اولا شكرا على الرد اخي صراحة كتاب مرة روووعة . قرائت جزء بسيط منة و راح استكمل الباقي . بالنسبة لاستخدام المتغير transform
    Lookat هو اني قد جربت جميع الطرق صحيح انة في اكثر من طريقة علشان احل المشكلة تبعي لان طرحت المتغير. دا فقط على ما احصل حل نهائي و للعلم ان بعد اطلاق اللعبة راح استهدم متغير ثاني و اعرف ان lookat ليس هو الحل في الالعاب 2D. ياريت لو كان عندك فيس علشان اتواصل معك و للعلم فقط انني عندي خبرة في البرمجة و مش مبتدئ بس حابب استفسر منك عن بعض الاكواد و لاحظت في كتابك انك استخدمت بغض الدوال الموجودة في مستندات الاسكربتنج في اليونتي للعلم فقط انني جزعت عليها بس ماعرف وش وضيفتها وكيف راح تفيدنا ع العموم لو عندك فيس ياريت تعطينا عنوانك و لو حابب تشوف اللعبة تبعي اكتب في اليوتيوب Cannon of Lights تحديث رقم ٣
    راح تشوف الفيديو .و لو حابب تستفسر عن اللعبة ياريت تتواصل معي عبر الفيس بوك دا حسابي .
    www.facebook.com/EMAD.Unity3D

    اترك تعليق:

يعمل...
X