كيفية إطلاق النار في Unity

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

إعداد المشهد

قبل أن نتعمق في البرمجة، دعنا أولاً نجهز المشهد لإنشاء المقذوف. فيما يلي الخطوات اللازمة للبدء:

  1. قم بإنشاء مشروع Unity جديد أو افتح مشروعًا موجودًا.
  2. قم بإنشاء كائن ثلاثي الأبعاد (على سبيل المثال، مكعب أو كرة) في المشهد الخاص بك، والذي سيعمل بمثابة اللاعب أو الكائن الذي يطلق النار.
  3. قم بإنشاء كائن ثلاثي الأبعاد آخر (على سبيل المثال، كرة أصغر حجمًا) ليعمل كقذيفة. سيتم إنشاء هذا الكائن عند إطلاق الرصاصة.
  4. قم بتنظيم الكائنات الخاصة بك عن طريق إعطائها أسماء ذات معنى، مثل "Player" و "ProjectilePrefab".

إنشاء نص اللقطة

الآن بعد أن أصبح لدينا المشهد الأساسي، فلنقم بإنشاء البرنامج النصي الذي سيتولى إطلاق النار. سنسمي البرنامج النصي Shot.cs ونربطه بكائن اللاعب. سيعمل هذا البرنامج النصي على توليد المقذوف وتطبيق قوة أمامية لمحاكاة إطلاق النار.

اتبع الخطوات التالية لإنشاء البرنامج النصي:

  1. في محرر Unity، انقر بزر الماوس الأيمن في نافذة المشروع وحدد Create > C# Script. قم ​​بتسمية البرنامج النصي Shot.cs.
  2. انقر نقرًا مزدوجًا فوق الملف Shot.cs لفتحه في محرر التعليمات البرمجية الخاص بك.
  3. استبدل الكود الافتراضي بالنص التالي:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

يؤدي هذا البرنامج النصي المهام التالية:

  • يقوم بتعريف projectilePrefab عام لحمل كائن المقذوف.
  • يستخدم firePoint لتحديد مكان انطلاق اللقطة.
  • يستخدم projectileSpeed للتحكم في سرعة المقذوف.
  • التحقق من إدخال اللاعب باستخدام Input.GetButtonDown("Fire1")، والذي يستمع إلى الإجراء "Fire1" (عادةً ما يتم تعيينه على زر الماوس الأيسر أو مفتاح المسافة).
  • يقوم بإنشاء مقذوف عند firePoint ويطبق عليه سرعة أمامية.

تعيين النص في Unity

الآن بعد أن أصبح النص جاهزًا، حان الوقت لتعيينه إلى كائن المشغل وإعداد المراجع:

  1. حدد "Player" GameObject في المشهد.
  2. اسحب البرنامج النصي Shot.cs إلى "Player" لإرفاقه.
  3. في نافذة المفتش، سترى حقول البرنامج النصي. قم بتعيين القالب المسبق للقذيفة (على سبيل المثال، الكرة الصغيرة التي أنشأتها) إلى الفتحة ProjectilePrefab.
  4. قم بإنشاء كائن لعبة فارغ أسفل كائن اللاعب وأطلق عليه اسم "FirePoint". ضعه أمام اللاعب أو أينما تريد أن يظهر المقذوف.
  5. اسحب الكائن "FirePoint" إلى الحقل FirePoint في البرنامج النصي.

اختبار اللقطة

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

الأسئلة الشائعة

كيف أقوم بتدمير المقذوف بعد إطلاقه؟

لمنع المقذوفات من البقاء للأبد، يمكنك تدميرها بعد فترة زمنية معينة. في طريقة FireShot، بعد إنشاء المقذوف، يمكنك إضافة:

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

كيف أضيف المؤثرات الصوتية أو الرسوم المتحركة إلى اللقطة؟

يمكنك إضافة المؤثرات الصوتية باستخدام مكون AudioSource. ما عليك سوى إضافته إلى المشغل وتشغيل الصوت بطريقة FireShot:

AudioSource audioSource = GetComponent();
audioSource.Play();

بالنسبة للرسوم المتحركة، يمكنك تشغيل الرسوم المتحركة باستخدام مكون Animator أو عن طريق تمكين/تعطيل حالات GameObject معينة داخل طريقة FireShot.

كيف أجعل المقذوف يتفاعل مع الأشياء الأخرى؟

لجعل المقذوف يتفاعل مع أشياء أخرى، تأكد من أن المقذوف يحتوي على مكون Rigidbody ومكون Collider. يمكنك بعد ذلك كتابة نص برمجي للتعامل مع اكتشاف التصادم باستخدام OnCollisionEnter أو OnTriggerEnter:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

خاتمة

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