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

كيف تتم برمجة الألعاب باستخدام يونتي

برمجة الألعاب باستخدام يونتي أمر شائع جداً في عالم برمجة الألعاب ولعل السبب في ذلك يعود إلى أن يونتي هو واحد من أشهر محركات الألعاب في وقتنا الحالي، ويمكن استخدامه من أجل تصميم وبرمجة مختلف أنواع ألعاب الفيديو سواءً ثنائية البعد (2D)  أو ثلاثية البعد (3D)  وعلى الرغم من وجود العديد من محركات الألعاب الأخرى والتي يمكن أن يكون بعضها منافساً قوياً ليونتي مثل أنريل إنجن إلا أن يونتي لا يزال يحتفظ بمكانة قوية بين محركات الألعاب، وسوف أخبرك في هذه المقالة معلومات أكثر تفصيلاً عن هذا المحرك لذلك أبقى معي.

ما هي الأقسام الأساسية لمحرك يونتي

  •  Project : وهو الجزء الذي يحتوي على كل ملفات المشروع من أكواد و ملفات صوتية و رسوم وخطوط وغيرها.
  • Hierarchy : يحتوي على كل ما هو موجود في المشهد الحالي (Scene)   والذي يمثل في معظم الألعاب المستوى (Level).
  •  Inspector : يحتوي على كل المعلومات التي تتعلق بأي كائن في اللعبة، حيث يكفي أن نحدد الكائن وسوف نحصل على معلومات عنه في Inspector وهذه المعلومات تشمل الموقع في الفراغ أي إحدائيات الكائن على المحاور الإحدائية (x/y/z) وغيرذلك الكثير من المعلومات.
  • Scene : يظهر لنا فيه كل ما لدينا من الكائنات في المستوى الحالي، وكما يحتوي على قسم يدعى (game)  والذي يمكننا من رؤية كيف تبدو اللعبة حالياً من خلال الكاميرة الرئيسية.

ما هي لغة البرمجة الأساسية في عملية برمجة الألعاب باستخدام يونتي

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

مفاهيم أساسية في لغة c# يجب أن تعرفها‌

المتغيرات :

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

مثال واقعي عن المتغير

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

 أنواع المتغيرات الأساسية في لغة c#

سوف أوضح لك الأنواع الأساسية من خلال المثال العملي التالي:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloWorld : MonoBehaviour
{
    string Name = "Ali"; //سلسلة من المحارف
    int x= 4; //عدد صحيح
    float y= 4.5f; // عدد عشري
    char r= 'h'; // محرف واحد 
    bool h = true; // قيمة منطقية
    
    int t; // قمت بتعريف متغير ولم اضع فيه أي قيمة 
 
  
}

العبارة الشرطية (if statement)

يمكن تشبيه (if)  بالبوابة التي وضع عليها قفل ، وهذا القفل هو الشرط، ففي كل مرة يتم فيها تنفيذ الكود الذي يحتوي على عبارة (if)  سوف يتم النظر إلى القفل (الشرط) هل هو محقق أم لا، ففي حال كان محققاً سوف يتم تنفيذ التعليمات البرمجية الموجودة داخل جسم العبارة (if) وفي حال لم يكن الشرط محققاً، يتم تجاهل العبارة (if) بالكامل.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloWorld : MonoBehaviour
{
    int x= 4; //عدد صحيح

    // Start is called before the first frame update
    void Start()
    {
       if(x==4)
       
       {
            x = x + 1;
       } 
    }

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


ومن الممكن أن تتضمن حلقة (if) أكثر من شرط واحد، وذلك عن طريق استخدام الكلمة المحجوزة  (else if)، ففي حال لم يكن الشرط محققاً (شرط عبارة if) يتم التحقق من الشرط الثاني شرط عبارة  (else if) ففي حال كان محققاً، يتم تنفيذ العبارات البرمجية الموجودة في جسم العبارة (else if)، ومن الممكن استخدام أكثر من عبارة (else if) واحدة، بهدف زيادة عدد الشروط التي يمكننا التحقق منها.

ومن الممكن إضافة تعليمات ليتم تنفيذها في حال فشل جميع الشروط السابقة، أي شرط (if)  غير محقق وشرط (else if) غير محقق، وذلك عن طريق استخدام الكلمة المحجوزة (else).

مثال عملي

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloWorld : MonoBehaviour
{
    int x = 4; //عدد صحيح

    // Start is called before the first frame update
    void Start()
    {
       if(x==1)  //أولاً يتم التحقق من هذا الشرط، واذا كان الشرط محققاً يتم تنفيذ جسم هذه العبارة
       
       {
            x = x + 1;
       } 

       else if(x==2)   //     ثم يتم التحقق من هذاالشرط،واذا كان الشرط محققاً، يتم تنفيذ جسم هذه العبارة
       {

            x = x + 2; 

       }

       else if(x==3)  // ثم يتم التحقق من هذا الشرط،اذا كان الشرط محققاً يتم تنفيذ جسم هذه العبارة
       {

            x = x + 3;
       }
    else  
    // اذا كانت جميع الشروط السابقة غير محققة، يتم تنفيذ هذه التعليمة 
    {
        x = x + 4;
    }

       }
    
    // Update is called once per frame
  
}


الحلقات التكرارية

تحتاج الحلقات التكرارية لشرحٍ مطول ولذلك سوف أخصص لها مقال خاص بها إن شاء الله. أما الآن سوف أذكر لك الفكرة الأساسية للحلقات التكرارية بإختلاف أنواعها.

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

حلقة  (for) على سبيل المثال

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HelloWorld : MonoBehaviour
{
  

    // Start is called before the first frame update
    void Start()
    {

   
      
    for (int i = 0; i < 4; i++)
    {
          Debug.Log("Hello Ali");
    }

      }
    

  
}


يمكنك الإطلاع على معلومات تفصيلية عن الحلقات من هنا.

مفاهيم أساسية في محرك الألعاب يونتي

قبل أن نبدء في هذه الفقرة لابد لي من أن أخبرك أن كل التعاريف والشروحات التي سوف أذكرها في الفقرات التالية هي من فهمي الشخصي، ومن تجربةٍ الشخصية في رحلتي في تعلم برمجة الألعاب.

Game Object

هو حاوية غير مرئية لها مكان من الفراغ، و زاوية دوران و حجم معين.

ويمكن التحكم في هذه العناصر الثلاثة الأساسية الخاصة بكل (Game Object)، اقصد (المكان / الدوران / الحجم) عن طريق (Inspector).

ويمكنني القول بأن محرك يونتي له قاعدة أساسية يجب عليك معرفتها عزيزي القارئ ألا وهي

كل شيء في يونتي هو عبارة عن (Game Object)

حيث أنه حتى الكاميرا الرئيسية تعتبر (Game Object)  ولها كما ذكرت (مكان / دوران / حجم) خاص بها، ويمكن أيضاً التحكم بهذه العناصر عن طريق (Inspector)، أي كما يتم التعامل مع أي (Game Object)  أخر في اللعبة.

Component

لقد ناقشنا سابقاً (Game Object)، ولكن لم نناقش كيف يمكن تحريكه؟ أو كيف يمكن جعله يتأثر بالجاذبية ويمتلك خصائص فيزيائية؟

في الحقيقة، لابد من إضافة (components) من أجل إعطاء أي خاصية ل (Game Object)، بما في ذلك الحركة والتفاعل مع الجاذبية وغير ذلك.

ومن الأمور التي لابد لي من ذكرها عند الحديث عن (Component)، أن ال (Game Object) يكون مزود ب (Transform component )، والذي يحدد مكان و دوران و حجم ال(Game Object).

أما (Inspector) فهو الذي يظهر (components)  المتصلة ب (Game Object) ، وكما من الممكن تغيير خصائص تلك (components) من خلاله وبما في ذلك الأكواد التي نقوم بكتابتها أو كما تسمى في يونتي (scripts)، فهي أيضاً تعتبر (components).

Scripts

يحتوي يونتي على العديد من (components) الجاهزة للإستخدام، مثل (RigidBody2D)  والذي يمنح (Game Object)  الخواص الفيزيائية مثل التأثر بالجاذبية، ولكن يبقى هناك العديد من الميزات التي لا يمكننا إضافتها إلى (Game Object) باستخدام  (Components) الموجودة في يونتي لوحدها، بل نحتاج لإضافة (Component)  خاص نقوم نحن ببناءه، وهذا هو (Script).

بشكل أساسي يستخدم يونتي (Visual Studio) كمحرر أكواد افتراضي له، ولكن يمكنك أن تستخدم أي محرر أكواد تريده.

ونظراُ لحجم محرر الأكواد (Visual Studio) الكبير، فأن (visual Studio Code) بديل جيد برأيي، ويمكنك معرفة كيفية تنصيبه للعمل مع يونتي من خلال الإطلاع على هذا المقال.

بالعودة إلى موضوع (Scripts)  فأن الشكل الإفتراضي له يكون كالتالي

using UnityEngine;
using System.Collections;



public class NewBehaviourScript : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    
    }
}

يمكنك معرفة المزيد حول (Scripts)  من خلال هذه المقالة.

كورس أنصحك به

هذا الكورس يشرح الكثير من الأساسيات وبما فيها الأساسيات التي ذكرناها في هذه المقالة ويوضح كيفية استخدامها.

في الحقيقة أنه من أفضل إن لم يكن أفضل كورس للمبتدئين لعام 2023 برأيي (طبعاً، أنا اقصد الأفضل حتى تاريخ نشر هذه المقالة).

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

مقالات انصحك بالإطلاع عليها من (UnityDocumentation)

من أنا وما هو الهدف من هذا الموقع

أنا علي بركات كاتب محتوى ومبرمج العاب (استخدم اسم Swar على الموقع)، ولكنني مازلت مبتدء في مجال برمجة الألعاب.

بالتأكيد سوف تتسأل عن السبب الذي سوف يجعل قراءة مقال لشخص مبتدء في المجال مفيد بالنسبة لك.

في الحقيقة لقد بدأت هذا الموقع بناءً على النصيحة التي أعطاها اليوتيوبر (ali abdaal) في فيديو بعنوان (How Writing Online Made me a Millionaire).

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

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

وهكذا نكون قد وصلنا إلى نهاية هذا المقال.

لا تنسى أن تخبرني برأيك في التعليقات أو من خلال المشاركة في التصويت الموجود في الأسفل.

التصويت:

[poll id=”6″]

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *