• ≡ القائمة
Home OF Games - DevGames
Menu
  • الرئيسية
  • دروس
  • كورسات
  • كتب
  • العاب
دروس الدالتان CircleCastAll و OverlapCircleAll

الدالتان CircleCastAll و OverlapCircleAll

عدد المشاهدات:
السلام عليكم ورحمة الله وبركاتة.

في هذا الدرس اناقشة وظيفة الدالتان CircleCastAll و OverlapCircleAll وكلتا الدالتان تقومان بعمل دائرة بحيث ان هذه الدائرة تتحقق من تلامسها او تعيد عدة وظائف مع احتكاكها بكائنات المشهد او شيء من هذا القبيل, ان الدالتان تختلفان قليلاً في العمل او بالاصح لكل دالة وظيفة خاصة و تختلفان في نوع البارمترات التي تتيحها ايضأً هناك تشابة في البارمترات و هذا الشيء الجميل الذي تتيحة لك هاتان الدالتان.

بالنسبة لاستخدام هاتان الدالتان فانهما موجودتان ضمن الفئة Physics2D الفئة الفيزيائية و التي توفر العديد من الدوال و حالياً سنناقش المذكور, اولاً ان فكرة الدالتان تقتصران على عمل دائرة تتحقق من عدة وظائف و لكن هناك اختلاف.

  • الدالة CircleCastAll تقوم برسم دائرة اعتماداً على شعاع تقوم برسمة حول نفسها و هي تطلب 5 متغيرات بحيث ان الاول من نوع Vector3 Origin اي نقطة الاصل التي ستظهر منها الدائرة, اما الثاني فهو من نوع float radius وهو يحدد قطر هذه الدائرة, و الثالث من نوع Vector3 Direction اي اتجاه الدائرة و هو يعتمد على البارامتر الرابع float Distance اي الطول او المسافة و الاخير Layer يتم فية وضع التلامسات, هنا قد تسألنا لماذا هذه الدائرة تطلب متغيران يحددان الطول و الاتجاه ففي النهائي هي دائرة؟! ساجيبك بشكل واضح, ان هذه الدالة تعتمد على شعاع لرسم دائرة اي دائرة شعاعية و يهي توفر العديد من الخصائص و التي قد ربما لا تحتاجها حالياً لكن ستحتاجها مستقبلاً, لاحظ الصورة في الاخير فهي معبرة.

  • الدالة الثانية OverlapCircleAll  ووضيفة هذه الدالة هو رسم دائرة فقط و هي تعيد 3 بارامترات بحيث ان الاول من نوع Vector3 point اي النقطة التي سترسم حولها الدائرة اعتماداً على المتغير الثاني float radius الذي يحدد قطر الدائرة و الاخير Layer ويحدد التلامس على لاير معين و بهذا الشكل تستطيع رسم دائرة و لكنها تختلف بحيث ان هذه الدالة اولاً ليست شعاعية اي ليست ضمن الدوال التي تعتمد على الاشعة بل هي تعتمد على رسم دائرة حول النطقة المحيطة و مركز المنطقة و في اكثر الاحيان يتم استخدام هذا الدالة و هي تختصر الامر و غير مكلفة بعكس الاشعة.
ملخص الدالتان انهما تقومان برسم دائرة و يمكنك من خلال هذه الدائرة جلب معلومات التلامس و غيرها, بالنسبة للاشعة فهي تعتمد على حجم اللعبة فلو كانت لعبتك بسيطة فاستخدام الدالة OverlapCircleAll يتيح لك رسم دائرة بشكل سريع بعكس الاشعة لانها مكلفة و خاصة في حالة ان هذا الكائن لن يبقى فترة طويلة في المشهد. هذه الصورة تعبر عن الاختلاف بين الدالتين:



شيء اخير ان هذه الدلتان تتيحان لك وضعهما كمصفوفة و هذا ما اردت توضيحة بشكل كبير.

بالنسبة لاستخادم الدالتان في اليونتي فلاحظ طريقة كتابة الدالة الاولى OverlapCircleAll  :

public LayerMask otherLayer;

void FixedUpdate()
{
     Collider2D[] col = Physics2D.OverlapCircleAll(transform.position, 5, otherLayer);
     foreach(Collider2D hit in col)
     {
if(hit.gameObject.CompareTag("other"))
{
Destroy(gameObject);
}
       }
}


حسناً دعنا نناقش الكود, لاحظ في البداية عرفت متغير من نوع LayerMask بحيث ان هذا المتغير يمثل اللاير الذي ستتلامس معة الدائرة, الان في الكود اسفلة عرفت الفئة Collider2D و هي مصفوفة و يمثلها المتغير col الذي يخزن فية معلومات الدالة OverlapCircleAll الان في الدالة لاحظ في البداية يطلب مني المكان الذي سيكون مركز الدائرة وهو موقع الكائن نفسة حالياً, ثانياً قطر الدائرة و افتراضية وضعتة 5 و اخيراً استخدمت اللاير الذي عرفتة سابقاً لكي نجلب معلومات التلامس مع هذا اللاير.


الحلقة foreach ستقوم بربط المتغير hit في المتغير col الذي يخزن معلومات الدائرة, الان اي شرط سيتحقق سيتم وضعة في المتغير col, لاحظ الشرط في الحلقة سيتم تحقق من حالة تصادم هذه الدائرة مع كائن يحمل التاج other افتراضياً و سيتم تدمير الكائن في حالة تحقق الشرط.


ان هذه الدالة تتحقق من التلامس عبر Collider2D مخفي و يقوم بجلب معلومات التصادم في حالة تصادم مع كائن يحمل Collider ظاهر و بهذا الشكل نكون قد رسمنا دائرة خيالية.


استخدام الدالة CircleCastAll, لاحظ هذا الكود:

public LayerMask otherLayer;

void FixedUpdate()
{
           RaycastHit2D[]  hits = Physics2D.CircleCastAll (transform.position, 5f, transform.position , 0f, otherLayer);

           foreach(RaycastHit2D hit in hits)
           {
                  if(hit.collider.gameObject.CompareTag("other"))
                   {
                            Destroy(gameObject);
                   }
           }
}


لاحظ المتغير LayerMask لم اغيرة و ساستخدمة لتحقق من ان الدائرة تلامست مع Layer معين, الان في الدالة FixedUpdate عرفت مصفوفة RaycastHit2D بحيث ان هذه الفئة ستقوم بتحديد جميع الكائنات التي تلامست معها وقمت بتسميتها hits, الان هذا المتغير يخزن قيم الدالة CircleCastAll من الفئة Phsics2D و هي خاصة بالدوال الفيزيائية, ان هذه الدالة تعيد 5 بارامترات بحيث ان الاول يطلب منك اصل الشعاع Origin و الثاني قطر الشعاع و كما تلاحظ ان القطر عندنا هو 5 و الثالث يحدد الاتجاه ونحن نحتاج الى هذا الشعاع في نقطة الاصل للكائن, بالنسبة للمتغير الرابع هو يطلب المسافة و لاحظ انني وضعتها صفر فلا حاجة لوضع مسافة للدائرة الشعاعية و لهذا سيتم وضع الدائرة في مركز الكائن, اما المتغير الاخير فهو يطلب Layer معين للتأكد من ان الشعاع تلامس مع هذا الـ Layer و ستجد انني وضعت اللاير الذي عرفته, اذن بهذا الشكل نكون قد هيئنها الدائرة الشعاعية لكي تظهر, الان يجب علينا وضع حلقة تتحقق من تلامس الشعاع مع الكائنات المحددة باللاير و هذا ماقمت به في استخدمت الحلقة التكرارية foreach و من خلال فئة باسم RaycastHit2D سيتم تخزين جميع قيم المصفوفة hits في المتغير hit و الان يجب على المتغير التأكد من تلامسه مع الكائنات عبر مقارنا التاج الذي في الكود مع التاج الذي يحمله الكائن الملامس, وكما هو موضح في الشرط قمت بالتأكد من ان التاج هو otherو سيتم تدمير كائن الاسكربت في حالة تحقق الشرط.

في النهاية اتمنى ان ينال الدرس اعجباكم و انا قمت بشرحة لاهميتة و للتعرف على اشياء جديدة و مفيدة و الى هنا اتمنى ان تشاركوا هذا الدرس لكي يستفيد منة الجميع و شكراً على المتابعة :) .
Unknown
اضف تعليق
دروس
الاثنين، 4 يناير 2016
  • غرد
  • شاركه
  • شاركه
  • شاركه
  • شاركه

الكاتب :- عماد عارف التوي

عماد عارف التوي مطور الالعاب و اعمل على دراسة البرمجة في محرك يونتي, احاول تقديم كل شيء جديد يخص البرمجة في اليونتي لانة الجانب الاهم في هذا المحرك وا لانة لاتوجد دروس تشرح الجانب البرمجي على المحرك, بدأت دخولي الى هذا المجال في 2012 و الى الان و انا احاول دراسة البرمجة في المحرك, من جانب اقدم كتب لتوسيع المعرفة في الجانبي البرمجي و تفصيل الاشياء التي لم يتم تغطيتها او بالاصح التي لم تشرح بشكل جيد, بأذن اللهاحاول تقديم كل جديد و كل ما اتمناة هو دعمكم لي بأي طريقة ادا امكن و شكراً لكم على زيارة مدونتي :)

مقالات قد تهمك

التعليقات
0 التعليقات

الأكثر زيارة

  • [كتاب] ورشة عمل لعبة Cannon of Lights2D
    [كتاب] ورشة عمل لعبة Cannon of Lights2D
    السلام عليكم ورحمة الله وبركاتة. الكتاب يشرح تصميم لعبة ثنائية الابعاد في محرك Unity 5 بحيث انه يحتوي على 160 صفحة تقريباً تناقش تصمي...
  • Binary لحفظ و استعادة البيانات في اليونتي.
    Binary لحفظ و استعادة البيانات في اليونتي.
    السلام عليكم, في هذا الدرس اردت مناقشة فكرة هذا الطريقة في حفظ الملفات النقاط و هذا الامر يقتصر على الناقط فقط بل على اي شيء تقريباً, جميع...
  • لعبة Cannon of Lights من تطوير - Home OF Games
    لعبة Cannon of Lights من تطوير - Home OF Games
    لعبة Cannon of Lights من تطوير استوديو Home OF Games عمل عملت عليها انا شخصياً (عماد عارف) بكل ما املك من خبرة في هذا المجال, ايضاً اع...
  • الوراثة في محرك Unity3D
    الوراثة في محرك Unity3D
    السلام عليكم ورحمة الله وبركاتة. خصصت هذا الدرس لاهميته في برمجة الالعاب و خاصة على محرك الالعاب Unity3D و الذي اناقش فية اليوم اسلوب ا...
  • مفهوم الـ Namespace في اليونتي
    مفهوم الـ Namespace في اليونتي
    الـ Namespace في اليونتي هو عبارة عن نطاق اسم تحددة لهذا الملف البرمجي, مثلاً معنا ملف برمجي بأسم ClassOne و آخر بأسم ClassTwo هنا في حالة ...
  • الدالتان CircleCastAll و OverlapCircleAll
    الدالتان CircleCastAll و OverlapCircleAll
    السلام عليكم ورحمة الله وبركاتة. في هذا الدرس اناقشة وظيفة الدالتان CircleCastAll و OverlapCircleAll وكلتا الدالتان تقومان بعمل دائرة بحيث...
  • كتاب UnityScripting الجزء الاول لتعلم البرمجة على محرك يونتي
    كتاب UnityScripting الجزء الاول لتعلم البرمجة على محرك يونتي
    السلام عليكم ورحمة الله وبركاتة. هذا الكتاب يعتبر مدخلك الاول لتعلم برمجة الالعاب على محرك Unity3D الكتاب يشرح البرمجة من الاساسيات البسيطة...
  • كتاب UnityScripting الجزء الثاني لتعلم البرمجة على محرك يونتي
    كتاب UnityScripting الجزء الثاني لتعلم البرمجة على محرك يونتي
    السلام عليكم ورحمة الله وبركاتة. هذا الكتاب يعتبر الجزء الثاني من سلسلة كتب UnityScripting التي تشرح البرمجة على محرك يونتي باللغة العربية....
  • كتاب: تعلم تصميم و برمجة لعبة (Cube Bird)
    كتاب: تعلم تصميم و برمجة لعبة (Cube Bird)
    السلام عليكم ورحمة الله وبركاتة. في هذا الكتاب اناقش طريقة تصميم لعبة شبيهه بلعبة  Flappy Bird لكن في هذا الكتاب سنناقش طريقة سهله لتصميم...
  • كورس برمجة و تصميم لعبة Pong-Out Game3D
    كورس برمجة و تصميم لعبة Pong-Out Game3D
    السلام عليكم ورحمة الله وبركاتة. في هذا الكورس اقوم بشرح طريقة تصميم و برمجة لعبة Pong-Out Game3D, ان مانعرف عن هذة اللعبة انها لعبة 2D...

الأقسام

  • العاب
  • دروس
  • كتب
  • كورسات

النشرة البريدية

Contact

الاسم

بريد إلكتروني *

رسالة *

عن المدونة

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

المدونة

Unknown
عرض الملف الشخصي الكامل الخاص بي
مدونة Home OF Games لتعليم تطوير الالعاب. يتم التشغيل بواسطة Blogger.
جميع الحقوق محفوظة Home OF Games - DevGames 2014-2015
تعريب وتطوير عرب ويب
تصميم Arlina Design