القائمة الرئيسية

الصفحات

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

الآن بعد أن فهمت بعض أساسيات العمل مع Unity ، وقمت بعمل لعبة أو اثنتين بنفسك ،
 دعنا نحاول التعمق أكثر ، أليس كذلك؟ بعد كل شيء ،
لقد كشطنا للتو سطح جبل الجليد الذي يمثل يونيتي Unity!
إذن ما الذي يناسب شخصية الكائن في Unity Game Engine ؟ 
الآن، سنكون فهم المفاهيم الأكثر أساسية تتعلق Unity ، أكثر تركيزا على 
gameObjects و منازل جاهزة Prefabs.

فهم المباني الجاهزة Prefabs والتشكيل

حسنًا ، Prefab تبدو الكلمة مخيفة بعض الشيء ، أليس كذلك؟
 لا تقلق ، فهي ليست في الواقع أحد أفضل أصدقاء مصمم اللعبة عندما يتعلق 
الأمر بإنشاء كائنات اللعبة في الوقت الفعلي. 
إذن ما هي بالضبط المباني الجاهزة Prefabs ؟ 
حسنًا ، المبنى الجاهز هو في الواقع مخطط أو قالب لجسم gameObject معين.
 نحن نعلم أن هذا أمر محير لفهمه في البداية ، لذلك دعنا نأخذ مثالًا أساسيًا للغاية.
تخيل أننا نصنع لعبة إطلاق نار في الفضاء ، وهذه هنا ، هي شخصية معادية.
Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

الآن ، إذا أردنا بناء مشهد لعبة في Unity مع شخصيتنا الرئيسية وعدو ، فسيبدو الأمر كما يلي:

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs



بالتأكيد ، هذا جيد تمامًا عندما يكون لديك عدو واحد ، ولكن ماذا لو كنت تريد الكثير منهم؟ 
ليس 2 أو 3 ، افترض مثل 15 أو 20.
 بصفتك مبتدئًا في تعلم Unity ، قد تفكر في شيء على غرار هذه الأسطر: 
استخدام نفس الأصل ، عدة مرات عن طريق إنشاء نسخ.


Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs
 

حسنًا ، هذا أيضًا حل قابل للتطبيق ، كما نفترض ، ولكن ماذا لو كان لكل كائن 
ذكاء اصطناعي خاص به وخصائصه المخصصة؟ هل حقا مثل، يمر عناء إضافة
 جسم جاسئ و المصادمات إلى كل شبح واحد؟
 ماذا لو أردت إنشاء المزيد من هؤلاء الأعداء ، أثناء اللعب وليس أثناء عملية صنع المشهد؟
 لا نوصي بجدية بوضع كل عدو بنفسك ، أو قد تصبح لعبتك مملة ومتوقعة حقًا.
ماذا لو تمكنا من تحديد عدو واحد ، وكان لدينا شيء يولد نسخًا من ذلك العدو ،
 لأنهم جميعًا متماثلون؟ حسنًا ، المبنى الجاهز هو ما يحل ذلك بالضبط.
إن PreFab هو تعريف كائن gameObject الذي نريد إنشاؤه ، 
وينتج نسخة طبق الأصل من كائن gameObject المحدد ، متى احتجت إليه ، وأينما كنت في حاجة إليه. 
يثبت هذا أنه مفيد للغاية عندما تحتاج إلى إنشاء كائنات gameObjects 
أثناء الطيران ، مثل الرصاص والأجانب والعملات المعدنية وما إلى ذلك ، 
نظرًا لأن Unity تقوم بمعظم العمل هنا ، مما يجعل gameObjects متاحة لنا على الفور.

استخدام المباني الجاهزة لإنشاء كائن اللعبة في وقت التشغيل

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

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

يجب أن ترى كائن GameObject جديدًا يظهر في التسلسل الهرمي.
 لكن لا شيء يظهر على الشاشة. 
نظرًا لأن هذا كائن gameObject فارغ ، فلا يحتوي على أي مكونات باستثناء Transform . 
تذكر أن Sprite Renderer هي أيضًا مكون. نظرًا لأن gameObject 
هذه لا تحتوي على مثل هذا المكون ، فهي ببساطة لا تقدم أي شيء. 
إنه ببساطة هناك. لعبة فارغة - الكائنات مفيدة حقًا لأشياء مثل البويضات 
والنقاط المرجعية ، لأنها غير مرئية أثناء اللعب.

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

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


Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

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

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

الآن ، هل تتذكر كيف أضفت الكائن إلى المشهد مرة أخرى عندما كنت تبدأ؟ 
قمت بسحب الكائن من الأصول إلى التسلسل الهرمي .
( يمكنك ايضا الاطلاع على كيفية تحريك الكائب باستخدام السكربت C-Script ) .
إنشاء المباني الجاهزة Prefabs هو عكس تلك العملية. 
تقوم بسحب كائن gameObject الموجود من التسلسل الهرمي إلى الأصول . 
تقوم Unity بعد ذلك بإنشاء قالب جاهز لهذا الكائن gameObject في المجلد الذي قمت بسحبه إليه.
 لذلك ، نظرًا لأننا نريد إنشاء قالب للمربع ،
 فسنقوم فقط بسحب الكائن المربع من التسلسل الهرمي إلى مجلد المباني الجاهزة Prefabs .


Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

يجب أن ترى شيئًا جديدًا يظهر في مجلد المباني الجاهزةPrefabs . 
إنها نفس الصورة بالضبط للمربع ، لكنها تظهر في حاوية رمادية.
 هذا هو المبنى الخاص بك! سهل أليس كذلك؟ الآن ، لإنشاء مثيل من هذا المبنى الجاهز 
كلما تم الضغط على مفتاح المسافة ، سنحتاج إلى كتابة نص صغير للمولد .
 لغرض وحيد هو إنشاء مربع عندما تضغط على مفتاح المسافة ، فإن الكود التالي مثالي :


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

public class Generator : MonoBehaviour
{
    public GameObject boxToGenerate;
    
    void update() 
    {
        // When spacebar is hit
        if(Input.GetKeyDown(KeyCode.Space))
        {
            // instantiate the box object
            Instantiate(boxToGenerate);
        }
    }

}


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

لاحظ كيف أن Start () الطريقة مفقودة هنا. 
التخلص من عمليات التفريغ Start () و Update () الطرق أمر يجب عليك القيام به ،
 ويوصى به تمامًا عند التطوير في Unity.

السطر 7: يجب أن تكون على دراية بهذا السطر الآن. 
إنه إعلان Unity أن تطلب منها إنشاء كائن gameObject ،
 من خلال إنشاء هذه الفتحة في المحرر الذي رأيناه سابقًا.



Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs


السطر 11: هذا به بعض الأشياء الممتعة التي تحدث.
 يحتوي Input الفصل ، كما نعلم ، على تعريفات لطرق مختلفة لتقديم مدخلات للعبة. 
وهذا يشمل أزرار الماوس ، مفاتيح لوحة المفاتيح .
في حالتنا ، نحن نستخدم طريقة GetKeyDown . 
هذا يكتشف عندما تم الضغط على مفتاح للتو. الطرق الأخرى للوحات المفاتيح هي
 GetKey (يكتشف الضغط على المفتاح الذي يتم الضغط عليه بعد ذلك) و
 GetKeyUp (يكتشف المفتاح الذي تم تحريره للتو). 
داخل طريقة GetKeyDown ، لدينا تعداد كمعامل ، KeyCode التعداد. 
إنها في الأساس قائمة تعداد جميع المفاتيح الموجودة على لوحة المفاتيح.

السطر 12: كما يمكنك التخمين ، هذا هو الخط السحري الرئيسي ، كما كنا نسميه 
و Instantiate الأسلوب هو أسلوب في GameObject فئة (مذكرة العاصمة G)، 
والتي لديها عدد قليل من الاختلافات مثقلة. 
ومع ذلك ، فإن المعلمة الرئيسية عبر كل هذه الأحمال الزائدة هي كائن gameObject 
الفعلي لإنشاء مثيل أو إنشاء. 
نظرًا لأننا نريد إنشاء المربع الذي نقوم بتوصيله بالمحرر ،
 فسنقدم boxToGenerate المعلمة كمعامل. 
ما عليك سوى حفظ هذا البرنامج النصي وإرفاقه في Generator gameObject في المحرر.
الآن ، لملء خانة Box To Generate التي تظهر في خصائص البرنامج النصي ،
 سنقوم ببساطة بالنقر فوق نقطة الدائرة واختيار المربع الجاهز الخاص بنا .
 بدلاً من ذلك ، يمكنك فقط سحب وإسقاط الصندوق الجاهز في الفتحة. 
ما يفعله هذا هو إخبار Unity بما يجب أن تولده. boxToGenerate هو ببساطة
 اسم متغير gameObject ، ولا يزال هذا المتغير بحاجة إلى شيء ما.
احفظ عملك في مشهد جديد ، وانقر فوق تشغيل. 
إذا سارت الأمور على ما يرام ، يجب إنشاء مربع جديد عندما تضغط على مفتاح المسافة.

Unity Game Engine: إنشاء كائنات اللعبة باستخدام Prefabs

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

جدول المحتويات