Як створити гру на тему Flappy Bird в Unity

У цьому підручнику Unity ми розповімо про процес створення гри Flappy Bird. Ця класична мобільна гра полягає в тому, щоб провести пташку крізь низку труб, постукуючи, щоб вона махала й уникала перешкод. Давайте зануримося в покрокові інструкції.

Крок 1: Налаштуйте свій проект Unity

  • Якщо ви ще цього не зробили, відкрийте Unity і створіть новий 2D-проект.
  • Налаштуйте параметри проекту, зокрема роздільну здатність і націлювання на платформу.

Крок 2. Імпортуйте ігрові ресурси

  • Знайдіть або створіть ресурси для пташки, труб і фону.
  • Імпортуйте ці ресурси у свій проект Unity.

Крок 3: Створіть Flappy Bird

  • Додайте 2D-спрайт для птаха.
  • Застосуйте прості елементи керування натисканням, щоб змусити пташку розмахувати.
  • Застосуйте силу тяжіння, щоб птах впала природним чином.

Крок 4: Спроектуйте труби

  • Створіть трубу prefab за допомогою 2D-спрайтів.
  • Налаштуйте систему відродження, щоб генерувати канали через регулярні проміжки часу.

Крок 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, Android тощо).
  • Розгорніть і протестуйте на вибраному пристрої чи емуляторі.

Висновок

Цей підручник охоплює основні кроки, щоб відтворити цю класичну гру Flappy Bird у Unity. Експериментуйте з додатковими функціями та вдосконаленнями, щоб зробити гру власною. Щасливого розвитку гри!

Рекомендовані статті
Як створити гру «Змійка» в Unity
Створення 2D гри Brick Breaker в Unity
Посібник Endless Runner для Unity
Створення розсувної головоломки в Unity
Міні-гра в Unity | КУБ уникайте
Посібник для гри-головоломки «три в ряд» в Unity
Міні-гра в Unity | Flappy Cube