كيفية إنشاء لعبة مستوحاة من لعبة Flappy Bird في Unity

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

الخطوة 1: قم بإعداد مشروعك Unity.

  • إذا لم تقم بذلك بعد، فافتح Unity وأنشئ مشروع ثنائي الأبعاد جديد.
  • قم بإعداد إعدادات مشروعك، بما في ذلك الدقة واستهداف النظام الأساسي.

الخطوة 2: استيراد أصول اللعبة

الخطوة 3: إنشاء فلابي بيرد

  • أضف كائنًا ثنائي الأبعاد للطائر.
  • تنفيذ ضوابط النقر البسيطة لجعل رفرفة الطيور.
  • تطبيق الجاذبية لجعل الطائر يسقط بشكل طبيعي.

الخطوة 4: تصميم الأنابيب

  • أنشئ أنبوبًا مجهزًا باستخدام النقوش المتحركة ثنائية الأبعاد.
  • قم بإعداد نظام تفرخ لتوليد الأنابيب على فترات منتظمة.

الخطوة 5: تنفيذ منطق اللعبة

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

تحقق من البرنامج النصي أدناه، فهو يتضمن الأجزاء 3 و4 و5.

'FlappyBird.cs'

using UnityEngine;
using System.Collections.Generic;

public class FlappyBird : MonoBehaviour
{
    public float jumpForce = 5f;
    public Transform pipeSpawnPoint;
    public GameObject pipePrefab;
    public float pipeSpawnInterval = 2f;
    public float pipeSpeed = 2f;

    private Rigidbody2D rb;
    private Transform mainCameraTransform;

    private List<GameObject> pipes = new List<GameObject>();

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        mainCameraTransform = Camera.main.transform;

        // Start spawning pipes
        InvokeRepeating("SpawnPipe", 2f, pipeSpawnInterval);
    }

    void Update()
    {
        // Flap when the screen is tapped or clicked
        if (Input.GetMouseButtonDown(0))
        {
            Flap();
        }

        // Move towards the pipes
        transform.Translate(Vector3.right * pipeSpeed * Time.deltaTime);

        // Move and manage spawned pipes
        foreach (GameObject pipe in pipes)
        {
            if (pipe != null)
            {
                pipe.transform.Translate(Vector3.left * pipeSpeed * Time.deltaTime);

                // End the game when colliding with pipes or ground
                if (pipe.CompareTag("Pipe") && IsCollidingWithPipe(pipe))
                {
                    EndGame();
                    return; // Exit the loop and update immediately
                }

                if (pipe.CompareTag("Ground") && IsCollidingWithGround(pipe))
                {
                    EndGame();
                    return; // Exit the loop and update immediately
                }

                // Remove pipes that are out of camera view
                if (pipe.transform.position.x < mainCameraTransform.position.x - 10f)
                {
                    Destroy(pipe);
                    pipes.Remove(pipe);
                    break; // Exit the loop to avoid modifying a collection while iterating
                }
            }
        }
    }

    void Flap()
    {
        // Apply force to make the bird jump
        rb.velocity = new Vector2(rb.velocity.x, jumpForce);
    }

    void SpawnPipe()
    {
        GameObject newPipe = Instantiate(pipePrefab, pipeSpawnPoint.position, Quaternion.identity);
        pipes.Add(newPipe);
    }

    bool IsCollidingWithPipe(GameObject pipe)
    {
        Collider2D pipeCollider = pipe.GetComponent<Collider2D>();
        return pipeCollider != null && pipeCollider.bounds.Intersects(GetComponent<Collider2D>().bounds);
    }

    bool IsCollidingWithGround(GameObject ground)
    {
        Collider2D groundCollider = ground.GetComponent<Collider2D>();
        return groundCollider != null && groundCollider.bounds.Intersects(GetComponent<Collider2D>().bounds);
    }

    void EndGame()
    {
        // Implement game over logic (e.g., display score, restart menu)
        Debug.Log("Game Over!");
    }
}

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

الخطوة 6: واجهة المستخدم والقوائم

  • تصميم واجهة مستخدم لعرض النتيجة.
  • أنشئ قوائم لبدء اللعبة وإعادة تشغيلها.

الخطوة 7: ضبط طريقة اللعب

  • اضبط فيزياء اللعبة وسرعتها للحصول على تجربة متوازنة وممتعة.
  • اختبر لعبتك وكررها لضمان اللعب السلس والصعب.

الخطوة 8: إضافة المؤثرات الصوتية

  • قم باستيراد أو إنشاء مؤثرات صوتية للرفرفة والتسجيل والاصطدامات.
  • قم بدمج هذه المؤثرات الصوتية في لعبتك.

تعديلات نموذجية لإضافة المؤثرات الصوتية في 'FlappyBird.cs':

using UnityEngine;
using System.Collections.Generic;

public class FlappyBird : MonoBehaviour
{
    // Existing variables...

    public AudioClip jumpSound;
    public AudioClip collisionSound;
    public AudioClip gameOverSound;

    private AudioSource audioSource;

    void Start()
    {
        // Existing Start() code...

        // Add AudioSource component and reference
        audioSource = gameObject.AddComponent<AudioSource>();
    }

    void Flap()
    {
        // Apply force to make the bird jump
        rb.velocity = new Vector2(rb.velocity.x, jumpForce);

        // Play jump sound
        audioSource.PlayOneShot(jumpSound);
    }

    void EndGame()
    {
        // Play game over sound
        audioSource.PlayOneShot(gameOverSound);

        // Implement other game over logic...
    }

    // Existing code...
}

الخطوة 9: البناء والنشر

  • أنشئ لعبتك لتناسب النظام الأساسي الذي تستهدفه (iOS، Android، وما إلى ذلك).
  • قم بالنشر والاختبار على جهازك أو المحاكي الذي اخترته.

خاتمة

يغطي هذا البرنامج التعليمي الخطوات الأساسية لإعادة إنشاء لعبة Flappy Bird الكلاسيكية في Unity. قم بتجربة الميزات والتحسينات الإضافية لجعل اللعبة خاصة بك. تطوير لعبة سعيدة!

المقالات المقترحة
لعبة صغيرة في الوحدة | المكعب القفاز
كيفية صنع لعبة الثعبان في الوحدة
إنشاء لعبة 2D Brick Breaker في Unity
إنشاء لعبة ألغاز منزلقة في Unity
لعبة صغيرة في الوحدة | تجنب المكعب
دروس عداء لا نهاية لها من أجل الوحدة
البرنامج التعليمي للعبة ألغاز Match-3 في Unity