• ≡ القائمة
Home OF Games - DevGames
Menu
  • الرئيسية
  • دروس
  • كورسات
  • كتب
  • العاب
دروس الوراثة في محرك Unity3D

الوراثة في محرك Unity3D

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


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

لنتفرض ان لذينا اعداء في المشهد و ان لكل عدو وظيفة خاصة و ايضاً عدة وظائف يتاشركها الاعداء فيما بينهم و عمل ملف برمجي واحد ووضعة في جميع الاعداء ربما قد يساهم في وضع مشكلة قد لاتراها و هي تكرار عمل الاكواد, الان فكر في ان هناك ملف برمجي و هذا الملف يحتوي على جميع الوظائف للاعداء و من خلال هذا الملف هناك ملفات اخرى ترث منه الوظائف, الان هنا سيتم تشغيل الاكواد في ملف الوراثة و سيتم طبعها و اعادة تشغيلها في الملفات الوارثة و بهذا الشكل نكون قد شغلنا الكود اكثر من مرة و في عدة ملفات دون الحاجة لتكرارة في عدة ملفات, حسناً دعنا نناقش هذه الفكرة في محرر النصوص Mono Development وهو المحرر الافتراضي في محرك Unity, اذن دعنا ننشيء ملف برمجي باسم EnemiesInfo و هذا الملف سيكون ملف الوراثة و الذي سيحتوي على جميع الوظائف للاعداء, الان قم بأنشاء ملف آخر باسم EnemyOne او شيء من هذا القبيل و لندع هذا الملف يرث من الملف الاولي و لكن ليس بهذه السرعة اولاً دعنا نجعل الملف EnemiesInfo ملف قابل للوراثة فقط باضافة abstract الى لاكلاس, لاحظ معي:

using UnityEngine;
using System.Collections;

public abstract class EnemiesInfo : MonoBehaviour {

}

لاحظ قمت باضافة abstract و بهذا الشكل نكون قد عرفنا ان هذا الملف قابل للوراثة فقط, الان بالعودة الى الملف EnemyOne و سنجعلة يرث من هذا الملف و سيكون بهذا الشكل:

using UnityEngine;
using System.Collections;

public class EnemyOne : EnemiesInfo  {

}

جميل, الان اصبح الملف EnemyOne يرث الوظائف من الملف EnemiesInfo.

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


using UnityEngine;
using System.Collections;

public abstract class EnemiesInfo : MonoBehaviour {

protected static int health;
[SerializeField] protected int maxHealth;


public virtual void ApplyHealth()
{
if(health <= 0)
{
health = 0;
Destroy(gameObject);
}
}

}

الان لاحظ معي ان المتغير health من نوع int و ايضاً هو static لكي يتيح للملفات التعامل معة عبر فئتة مباشرةً, بالنسبة لهذا المتغير و المتغير maxHealth ستجد ان معرف الوصول اليهم هو protected وهو يتيح للفئة الحالية و الفئة الوارثة التعامل مع هذا المتغير و لكن حالة كحال معرف الوصول private و لكن الفرق بينهم ان معروف الوصول الخاص بملفات الورثة سيتيح لك التعامل مع المتغير في الملف الحالي و الملف الوارث, اما معرف الوصول private سيتيح للملف الحالي فقط الوصول الى هذا المتغير و لن تستطيع تغيير قيمتة خارج هذا الملف, ايضاً بالنسبة لمعرف الوصول public فأنة يتيح للفئة الحالية و الوارثة الوصول الى هذا المتغير مع قابلية الظهور في الانسباكتور, و لكن غالباً لايتم استخدامة بهذا الشكل اي وضعة في المتغير بشكل مباشر و لكن هناك طريقة تتيح لمعرف الوصول protected الظهور في الانسابكتور و هي عمل تسلسل ميداني او برمجي لهذا المتغير بحيث يتيح له الظهور في فئتة الحالية و الفئات الوارثة و تتم طريقة التسلسل الميداني عبر استخدام [SerializeField] و بهذا الشكل يكون شكل المتغير maxHealth هو هذا:

[SerializeField] protected int maxHealth;

حسناً بالنسبة للدالة ApplyHealth و التي تخزن قيمة الصحة و انتهائها ووضع شرط يقوم بتدمير الكائن, و تلاحظ ان الدالة virtual بحيث انها ستتيح للفئة الوارثة نسخها و استخدام محتواها بشكل مباشر و لكن يجب على الملف الوارث عمل override للدالة الحالية و يقوم بطبع محتواها باستخدام اداة الطبع base و بهذا الشكل يكون الملف الوارث قادر على استنساخ الدالة من ملف الوراثة, اذن شكل الملف EnemyOne سيكون :

using UnityEngine;
using System.Collections;

public class EnemyOne : EnemiesInfo  {

void Update()
{
ApplyHealth();
}

public override void ApplyHealth()
{
base.ApplyHealth();
}

}

اذن بهذا الشكل يكون الملف EnemyOne قد طبع الدالة ApplyHealth و استطاع الوصول اليها, الان بالعودة الى المشروع ستجد ان المتغير maxHealth قد ظهر في الانسباكتور و شيء آخر و لكي تتأكد من عمل الدالة ApplyHealth بشكل صحيح قم بعمل طبع للمتغير health و ستجد انك تستطيع الوصول اليه و ايضاً طبعة بكل بساطة.

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

Unknown
اضف تعليق
دروس
الخميس، 31 ديسمبر 2015
  • غرد
  • شاركه
  • شاركه
  • شاركه
  • شاركه

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

عماد عارف التوي مطور الالعاب و اعمل على دراسة البرمجة في محرك يونتي, احاول تقديم كل شيء جديد يخص البرمجة في اليونتي لانة الجانب الاهم في هذا المحرك وا لانة لاتوجد دروس تشرح الجانب البرمجي على المحرك, بدأت دخولي الى هذا المجال في 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