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
- Recherchez ou créez des éléments pour l'oiseau , les tuyaux et l'arrière-plan.
- Importez ces actifs dans votre projet Unity.
É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 !