حطّم
الدرس 6 من 16 في دورة لعبة Unity: تحطيم الطوب على Coddy.
لا تحتوي الطوب على مكوّن Rigidbody، لكن الكرة تحتوي عليه، ويرسل Unity رسالة OnCollisionEnter إلى كلا الجسمين عند حدوث تصادم. لذا يمكن للطوبة أن تلاحظ الاصطدام بنفسها. في سكربت الطوبة، يشير gameObject إلى الطوبة، بينما يشير collision.gameObject إلى الجسم الذي اصطدم بها.
تعود النقاط إلى GameManager، والطوب نسخ من أصل جاهز (prefab). الأصل الجاهز هو مورد خارج المشهد، لذا لا يمكن لحقوله الإشارة إلى GameManager الموجود في المشهد عبر Inspector. يعيّن GameManager القيمة الثابتة GameManager.Instance لنفسه في Awake()، وبذلك يمكن لأي سكربت الوصول إليه، بما في ذلك نسخ الأصل الجاهز.
مزهرية تتحطم عندما يصطدم بها اللاعب أثناء الركض:
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}تزيل Destroy(gameObject) المزهرية. أما Destroy(collision.gameObject) فستزيل اللاعب، وDestroy(this) تزيل السكربت فقط، وتترك المزهرية قائمة. إن إبقاء عملية التحطيم في دالتها العامة الخاصة يعني أن الشيفرات الأخرى، مثل قنبلة أو تعزيز قوة، يمكنها تحطيم المزهرية أيضًا.
التحدي
متوسط- في
GameManager، أضفint scoreوpublic void BrickBroken(Brick brick)، بحيث تضيفpointsالخاص بالطوبة إلىscore. - في
Brick، اكتبpublic void Hit(): تُعلِمGameManager.Instanceبأن هذه الطوبة قد تحطمت، ثم تدمّر الطوبة. - أضف
OnCollisionEnterإلىBrick: عندما يصطدم به الكائن الموسوم بـBall، استدعِHit().
اضغط على Play، وحطّم بعض الطوب، ثم اضغط على Check.
جرّب بنفسك
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// التالي: تكسر الكرة طوبةً وتُحرز نقاطها.
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.