Cách tạo một trò chơi lấy cảm hứng từ Flappy Bird trong Unity

Trong hướng dẫn Unity này, chúng ta sẽ tìm hiểu quy trình tạo một trò chơi Flappy Bird. Trò chơi di động cổ điển này liên quan đến việc hướng dẫn một con chim đi qua một loạt các đường ống bằng cách chạm vào để khiến nó bay lên và tránh chướng ngại vật. Hãy đi sâu vào hướng dẫn từng bước.

Bước 1: Thiết lập dự án Unity của bạn

  • Nếu bạn chưa làm vậy, hãy mở Unity và tạo dự án 2D mới.
  • Thiết lập cài đặt dự án của bạn, bao gồm độ phân giải và nhắm mục tiêu nền tảng.

Bước 2: Nhập nội dung trò chơi

  • Tìm hoặc tạo nội dung cho bird, pipe và nền.
  • Nhập những nội dung này vào dự án Unity của bạn.

Bước 3: Tạo Flappy Bird

  • Thêm một sprite 2D cho con chim.
  • Thực hiện các điều khiển chạm đơn giản để làm cho chim vỗ cánh.
  • Tác dụng trọng lực để chim rơi tự nhiên.

Bước 4: Thiết kế đường ống

  • Tạo một ống prefab bằng cách sử dụng các họa tiết 2D.
  • Thiết lập hệ thống sinh sản để tạo ra các đường ống đều đặn.

Bước 5: Triển khai logic trò chơi

  • Thêm hệ thống tính điểm để đi qua đường ống thành công.
  • Thực hiện phát hiện va chạm để kết thúc trò chơi khi chim chạm vào đường ống hoặc mặt đất.

Hãy kiểm tra đoạn script bên dưới, nó gói gọn các phần 3, 4 và 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!");
    }
}

Tập lệnh Unity được cung cấp thể hiện một trò chơi Flappy Bird đơn giản hóa, trong đó chú chim do người chơi điều khiển di chuyển qua môi trường cuộn. Con chim có thể nhảy theo thao tác của người dùng và trò chơi sẽ kiểm tra các va chạm với cả đường ống và mặt đất, khiến trò chơi kết thúc nếu bị phát hiện. Các ống được sinh ra linh hoạt đều đặn và di chuyển về phía người chơi. Tập lệnh bao gồm logic để loại bỏ các đường ống nằm ngoài chế độ xem camera nhằm tối ưu hóa hiệu suất. Chức năng 'EndGame' được gọi khi va chạm và có thể được mở rộng để xử lý nhiều tình huống kết thúc trò chơi khác nhau, chẳng hạn như hiển thị điểm số hoặc khởi động lại trò chơi. Mã này nhằm mục đích cung cấp cách triển khai cơ bản về cơ chế Flappy Bird trong môi trường Unity.

Bước 6: Giao diện người dùng và Menu

  • Thiết kế giao diện hiển thị điểm số.
  • Tạo menu để bắt đầu và khởi động lại trò chơi.

Bước 7: Tinh chỉnh lối chơi

  • Điều chỉnh trò chơi vật lý và tốc độ để có trải nghiệm cân bằng và thú vị.
  • Kiểm tra và lặp lại trò chơi của bạn để đảm bảo lối chơi mượt mà và đầy thử thách.

Bước 8: Thêm hiệu ứng âm thanh

  • Nhập hoặc tạo hiệu ứng âm thanh khi vỗ, ghi điểm và va chạm.
  • Tích hợp các hiệu ứng âm thanh này vào trò chơi của bạn.

Ví dụ sửa đổi để thêm hiệu ứng âm thanh trong '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...
}

Bước 9: Xây dựng và triển khai

  • Xây dựng trò chơi cho nền tảng mục tiêu của bạn (iOS, Android, v.v.).
  • Triển khai và thử nghiệm trên thiết bị hoặc trình mô phỏng bạn đã chọn.

Phần kết luận

Hướng dẫn này bao gồm các bước cần thiết để tạo lại trò chơi Flappy Bird cổ điển này trong Unity. Thử nghiệm các tính năng và cải tiến bổ sung để biến trò chơi thành của riêng bạn. Chúc trò chơi phát triển vui vẻ!

Bài viết được đề xuất
Trò chơi nhỏ trong Unity | khối lập phương Flappy
Trang trại Zombie | Tạo trò chơi platformer 2D trong Unity
Cách tạo trò chơi rắn trong Unity
Tạo trò chơi Brick Breaker 2D trong Unity
Tạo trò chơi giải đố trượt trong Unity
Hướng dẫn trò chơi giải đố ghép 3 trong Unity
Trò chơi nhỏ trong Unity | CUBTránh