איך להכין משחק בהשראת Flappy Bird באחדות

במדריך Unity זה, נעבור על תהליך יצירת משחק Flappy Bird. משחק נייד קלאסי זה כולל הדרכה של ציפור דרך סדרה של צינורות על ידי הקשה כדי לגרום לה להתנופף ולהימנע ממכשולים. בואו נצלול לתוך ההוראות שלב אחר שלב.

שלב 1: הגדר את פרויקט Unity שלך

  • אם עדיין לא עשית זאת, פתח את Unity וצור פרויקט דו-ממדי חדש.
  • הגדר את הגדרות הפרויקט שלך, כולל רזולוציה ומיקוד לפלטפורמה.

שלב 2: ייבוא ​​נכסי משחק

  • מצא או צור נכסים עבור ציפור, צינורות ורקע.
  • ייבא את הנכסים האלה לפרויקט Unity שלך.

שלב 3: צור את Flappy Bird

  • הוסף ספרייט דו מימדי עבור הציפור.
  • יישם בקרות ברז פשוטות כדי להפוך את דש הציפור.
  • החל כוח הכבידה כדי לגרום לציפור ליפול באופן טבעי.

שלב 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: ממשק משתמש ותפריטים

  • עיצוב ממשק משתמש להצגת הציון.
  • צור תפריטים להפעלה והפעלה מחדש של המשחק.

שלב 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, אנדרואיד וכו').
  • פרוס ובדוק במכשיר או באמולטור שבחרת.

מַסְקָנָה

הדרכה זו מכסה את השלבים החיוניים ליצירה מחדש של משחק Flappy Bird הקלאסי הזה ב-Unity. נסה עם תכונות ושיפורים נוספים כדי להפוך את המשחק לשלך. פיתוח משחק שמח!