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

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

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

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

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

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

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

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

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

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