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

Dans ce didacticiel Unity, nous allons parcourir le processus de création d'un jeu Flappy Bird. Ce jeu mobile classique consiste à guider un oiseau à travers une série de tuyaux en tapotant pour le faire battre et éviter les obstacles. Passons aux 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 plate-forme.

Étape 2: Importer les éléments du jeu

Étape 3: Créer le Flappy Bird

  • Ajoutez un sprite 2D pour l'oiseau.
  • Implémentez des commandes tactiles 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 à l'aide de sprites 2D.
  • Mettez en place un système de spawn pour générer des tuyaux à intervalles réguliers.

Étape 5: implémenter la logique du jeu

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

Vérifiez 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éfilant. L'oiseau peut sauter suite à la saisie de l'utilisateur et le jeu vérifie les collisions avec les tuyaux et le sol, déclenchant ainsi la fin du jeu s'il est détecté. Les tuyaux apparaissent dynamiquement à intervalles réguliers et se déplacent vers le joueur. Le script inclut une logique permettant de 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 peut être étendue pour gérer divers scénarios de fin de partie, tels que l'affichage d'un score ou le redémarrage du jeu. Le code vise à offrir une implémentation de base de la mécanique de Flappy Bird dans un environnement Unity.

Étape 6: interface utilisateur et menus

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

Étape 7: Affiner le gameplay

  • Ajustez le jeu physique et la vitesse pour une expérience équilibrée et agréable.
  • Testez et itérez sur 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 didacticiel couvre les étapes essentielles pour recréer ce jeu classique Flappy Bird en Unity. Expérimentez avec des fonctionnalités et des améliorations supplémentaires pour vous approprier le jeu. Bon développement de jeu !

Articles suggérés
Mini-jeu dans Unity | Flappy Cube
Comment créer un jeu de serpent dans Unity
Créer un jeu de casse-briques 2D dans Unity
Créer un jeu de puzzle coulissant dans Unity
Tutoriel Endless Runner pour Unity
Tutoriel pour le jeu de puzzle Match-3 dans Unity
Zombies de la ferme | Making d'un jeu de plateforme 2D dans Unity