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

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

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

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

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

الخطوة 3: إنشاء الطائر المرفرف

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

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

  • إنشاء أنبوب prefab باستخدام صور ثنائية الأبعاد.
  • قم بإعداد نظام توليد لإنشاء الأنابيب على فترات منتظمة.

الخطوة 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: واجهة المستخدم والقوائم

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

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

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

الخطوة 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 الكلاسيكية هذه في h1. جرّب الميزات والتحسينات الإضافية لجعل اللعبة خاصة بك. نتمنى لك تطويرًا ممتعًا للعبة!