Jak stworzyć grę inspirowaną Flappy Bird w Unity

W tym samouczku Unity omówimy proces tworzenia gry Flappy Bird. Ta klasyczna gra mobilna polega na prowadzeniu ptaka przez szereg rur, dotykając go tak, aby trzepotał i unikał przeszkód. Przejdźmy do instrukcji krok po kroku.

Krok 1: Skonfiguruj swój projekt Unity

  • Jeśli jeszcze tego nie zrobiłeś, otwórz Unity i utwórz nowy projekt 2D.
  • Skonfiguruj ustawienia projektu, w tym rozdzielczość i kierowanie na platformę.

Krok 2: Zaimportuj zasoby gry

Krok 3: Utwórz Flappy Bird

  • Dodaj duszka 2D dla ptaka.
  • Zaimplementuj proste sterowanie dotykowe, aby stworzyć klapę dla ptaków.
  • Zastosuj grawitację, aby ptak spadł naturalnie.

Krok 4: Zaprojektuj rury

  • Utwórz rurę prefabrykat przy użyciu ikonek 2D.
  • Skonfiguruj system spawnowania, aby generować rury w regularnych odstępach czasu.

Krok 5: Zaimplementuj logikę gry

  • Dodaj system punktacji za pomyślne przejście przez rury.
  • Zaimplementuj wykrywanie kolizji, aby zakończyć grę, gdy ptak uderzy w rury lub ziemię.

Sprawdź poniższy skrypt, zawiera on części 3, 4 i 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!");
    }
}

Dostarczony skrypt Unity reprezentuje uproszczoną grę Flappy Bird, w której kontrolowany przez gracza ptak porusza się po przewijanym środowisku. Ptak może skakać po wejściu użytkownika, a gra sprawdza, czy nie ma kolizji z rurami i ziemią, a jeśli zostanie wykryta, gra kończy się. Rury pojawiają się dynamicznie w regularnych odstępach czasu i poruszają się w stronę gracza. Skrypt zawiera logikę usuwania potoków wychodzących poza widok kamery w celu optymalizacji wydajności. Funkcja 'EndGame' wywoływana jest w przypadku kolizji i można ją rozszerzyć, aby obsługiwała różne scenariusze zakończenia gry, takie jak wyświetlanie wyniku lub ponowne uruchamianie gry. Kod ma na celu zapewnienie podstawowej implementacji mechaniki Flappy Bird w środowisku Unity.

Krok 6: Interfejs użytkownika i menu

  • Zaprojektuj interfejs użytkownika do wyświetlania wyniku.
  • Utwórz menu do uruchamiania i ponownego uruchamiania gry.

Krok 7: Dopracuj rozgrywkę

  • Dostosuj grę fizyka i prędkość, aby uzyskać zrównoważone i przyjemne wrażenia.
  • Testuj i wykonuj iteracje w swojej grze, aby zapewnić płynną i wymagającą rozgrywkę.

Krok 8: Dodaj efekty dźwiękowe

  • Importuj lub twórz efekty dźwiękowe do trzepotania, punktowania i kolizji.
  • Zintegruj te efekty dźwiękowe ze swoją grą.

Przykładowe modyfikacje dodające efekty dźwiękowe w '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...
}

Krok 9: Kompiluj i wdrażaj

  • Zbuduj swoją grę na platformę docelową (iOS, Android itp.).
  • Wdróż i przetestuj na wybranym urządzeniu lub emulatorze.

Wniosek

W tym samouczku opisano podstawowe kroki potrzebne do odtworzenia tej klasycznej gry Flappy Bird w formacie Unity. Eksperymentuj z dodatkowymi funkcjami i ulepszeniami, aby dostosować grę do swoich potrzeb. Szczęśliwego rozwoju gry!

Sugerowane artykuły
Jak zrobić grę w węża w Unity
Minigra w Unity | Flappy Cube
Tworzenie gry 2D Brick Breaker w Unity
Poradnik Endless Runner dla Unity
Tworzenie przesuwanej gry logicznej w Unity
Samouczek gry logicznej typu „Dopasuj 3” w Unity
Minigra w Unity | KOŚĆUnikaj