Comment créer un jeu inspiré de Flappy Bird dans Unity

Dans ce tutoriel, nous allons vous expliquer comment créer un jeu Flappy Bird. Ce jeu mobile classique consiste à guider un oiseau à travers une série de tuyaux en appuyant dessus pour le faire battre des ailes et éviter les obstacles. Découvrons ensemble les instructions étape par étape.

Étape 1: Configurez votre projet Unity

  • Si vous ne l'avez pas encore fait, ouvrez Unity et créez un nouveau projet 2D.
  • Configurez les paramètres de votre projet, y compris la résolution et le ciblage de la plate-forme.

Étape 2: Importer les ressources du jeu

  • Recherchez ou créez des ressources pour l'oiseau , les tuyaux et l'arrière-plan.
  • Importez ces ressources dans votre projet Unity.

Étape 3: Créer le Flappy Bird

  • Ajoutez un sprite 2D pour l'oiseau.
  • Implémentez des commandes de tapotement simples pour faire battre l'oiseau.
  • Appliquez la gravité pour faire tomber l’oiseau naturellement.

Étape 4: Concevoir les tuyaux

  • Créez un tuyau prefab en utilisant des sprites 2D.
  • Configurez un système d'apparition pour générer des tuyaux à intervalles réguliers.

Étape 5: Mettre en œuvre la logique du jeu

  • Ajoutez un système de notation pour le passage réussi des tuyaux.
  • Implémentez la détection de collision pour mettre fin au jeu lorsque l'oiseau heurte des tuyaux ou le sol.

Consultez le script ci-dessous, il encapsule les parties 3, 4 et 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!");
    }
}

Le script Unity fourni représente un jeu Flappy Bird simplifié, dans lequel l'oiseau contrôlé par le joueur navigue dans un environnement à défilement. L'oiseau peut sauter sur commande de l'utilisateur, et le jeu vérifie les collisions avec les tuyaux et le sol, déclenchant un game over s'il est détecté. Les tuyaux sont générés dynamiquement à intervalles réguliers et se déplacent vers le joueur. Le script inclut une logique pour supprimer les tuyaux qui sortent de la vue de la caméra afin d'optimiser les performances. La fonction 'EndGame' est appelée en cas de collision, et elle peut être étendue pour gérer divers scénarios de game over, tels que l'affichage d'un score ou le redémarrage du jeu. Le code vise à offrir une implémentation de base des mécanismes de Flappy Bird dans un environnement Unity.

Étape 6: Interface utilisateur et menus

  • Concevoir une interface utilisateur pour afficher le score.
  • Créez des menus pour démarrer et redémarrer le jeu.

Étape 7: peaufiner le gameplay

  • Ajustez la physique et la vitesse du jeu pour une expérience équilibrée et agréable.
  • Testez et répétez votre jeu pour garantir un gameplay fluide et stimulant.

Étape 8: ajouter des effets sonores

  • Importez ou créez des effets sonores pour les battements, les scores et les collisions.
  • Intégrez ces effets sonores dans votre jeu.

Exemples de modifications pour ajouter des effets sonores dans '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...
}

Étape 9: Créer et déployer

  • Créez votre jeu pour votre plateforme cible (iOS, Android, etc.).
  • Déployez et testez sur l'appareil ou l'émulateur de votre choix.

Conclusion

Ce tutoriel couvre les étapes essentielles pour recréer ce jeu classique Flappy Bird en Unity. Expérimentez des fonctionnalités et des améliorations supplémentaires pour personnaliser le jeu. Bon développement de jeu !