Unity Game Engine: تدمير الكائنات gameObjects
نظرًا لأهمية إنشاء وتعديل gameObjects في إحدى الألعاب ،
فمن المهم أيضًا تدميرها عندما لا تكون مطلوبة.
تشمل الأسباب الرئيسية لتدمير كائنات اللعبة إدارة الذاكرة والتخلص
من كائنات اللعبة غير الضرورية (مثل تلك التي تتجاوز الكاميرا ولا تعود) ،
أو حتى الأحداث المتعلقة باللعبة ( الإصابة برصاصة).
Destroy(gameObject):
هذا هو الكود المستخدم لتدمير كائن gameObject.
بسيط إلى حد ما ، أليس كذلك؟
دعنا نرجع إلى الوراء ونلقي نظرة أعمق قليلاً على ما يحدث.
إذا حاولت استكشاف Destroy الطريقة في IDE الخاص بك ،
فسترى أن طريقة Destroy تحتوي على متغيرين (نماذج محملة بشكل زائد).
يؤدي نموذج التحميل الزائد الأول ببساطة إلى تدمير كائن gameObject
الذي يتم إدخاله كمعامل ، ولا شيء آخر.
في حين، شكل الزائد الثاني، ينطوي على مقياس آخر
time, t باعتبارها float متغير.
هذا وسوف انتظر الوقت المحدد في ثوان قبل تدمير gameObject .
يكون هذا البديل من Destroy الطريقة مفيدًا جدًا عندما تريد أن ينهي كائن
gameObject بعض الأشياء / المهام / الحسابات الأخرى قبل تدمير نفسه.
على سبيل المثال ، تشغيل رسم متحرك يحتضر أو إضافة درجة.
حتى آخر مقال تعليمي لدينا ، أضفنا بنجاح هدفًا يُخرج رسالة إلى
وحدة التحكم عند اصطدامها برصاصة.
الآن دعونا نجعل الهدف يختفي ، بمجرد أن يصيبه ، أليس كذلك؟
كيف نفعل ذلك؟ نضيف ببساطة الأسطر التالية إلى البرنامج النصي للهدف الموجود بالفعل:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TargetBehaviour : MonoBehaviour
{
void onCollisionEnter2D(Collision2D col)
{
// When target is hit
if(col.gameObject.tag == "Bullet")
{
Debug.Log("Target was Hit!");
}
// object which collided
Destroy(col.gameObject());
// object with which it collided
Destroy(gameObject);
}
}
ماذا يحدث هنا؟ نحن نقول للبرنامج النصي تدمير كائن gameObject المتضمن في بيانات col.
بعبارات أبسط ، هذا يعني أننا نخبر البرنامج النصي بتدمير الرصاصة (كرة نارية) ،
لأننا لا نريد أن تستمر رصاصتنا بعد أن تدمر هدفنا.
في Destroy العبارة الثانية (خطنا السحري ) ،
يدمر كائن gameObject نفسه.
تذكر أن مجرد استخدام المصطلح gameObject يشير إلى كائن gameObject
الذي تم إرفاق النص به ، في حالتنا ، الهدف. احفظ النص ، وأطلق اللعبة!
في وضع التحرير.
في وضع التشغيل ، بعد إصابة الهدف
بمجرد أن نصيب الهدف تختفي الرصاصة والهدف!
ألقِ نظرة على التسلسل الهرمي ، وستلاحظ أن كائنات لعبة استنساخ الهدف والرصاصة مفقودة
. لقد اختفوا ببساطة من الوجود بمجرد تدميرهم في اللعبة.
نظرًا لأننا وضعنا الهدف في المشهد أثناء بنائه ،
فسوف يعود دائمًا كلما عدنا إلى المشهد ، أي عندما ندخل في وضع التشغيل.
لذلك هناك لديك! يعد تدمير الكائنات gameObjects في حد ذاته مفهومًا سهلًا للغاية ،
لأنه يتضمن سطرًا واحدًا فقط من التعليمات البرمجية ،
ولكن السحر الحقيقي يحدث عندما تستدعي الطريقة جنبًا إلى جنب مع العبارات الأخرى
لجعل تدمير الكائن يبدو ويشعر بأنه حقيقي وصحيح.
لقد فعلنا الكثير هذه المرة. أعطينا شخصيتنا القدرة على إطلاق الرصاص ،
وتعلمنا مفاهيم المباني الجاهزة وإنشاء مثيل لها.
بعد ذلك ، أعطينا شخصيتنا هدفًا لإطلاق النار ، وبالتالي فهمنا اكتشاف الاصطدام ،
وأخيرًا ، جعلنا الأهداف تدمر نفسها بمجرد إصابتها ، وننتهي من تدمير الأشياء.
التدريب العملي
حاول إعطاء هدفك قيمة صحية ، مما يعني أنه يجب عليك إطلاق النار عليه عدة مرات لكسرها.
لن يختبر هذا منطقك في صنع الألعاب فحسب ،
بل سيختبر أيضًا قدرتك على التفكير في منطق البرمجة الأساسي.
تلميح: يمكن integer للمتغير البسيط if والبيان أن يقطع شوطًا طويلاً.
حاول إنشاء منطقة نهاية للرصاص خارج منطقة تغطية الكاميرا.
إذا خرجت رصاصة من منطقة الكاميرا ولمست هذه المنطقة النهائية ،
فسوف يتم تدميرها ، بدلاً من الانطلاق بلا هدف إلى الفضاء الميت.
هذه طريقة فعالة لإدارة الذاكرة عندما تدخل في ألعاب أكبر وأكثر تعقيدًا.