Cara Membuat Game yang Terinspirasi Flappy Bird di Unity

Dalam tutorial Unity ini, kita akan membahas proses pembuatan permainan Flappy Bird. Permainan seluler klasik ini melibatkan pengarahan seekor burung melalui serangkaian pipa dengan mengetuknya agar mengepak dan menghindari rintangan. Mari selami petunjuk langkah demi langkahnya.

Langkah 1: Siapkan Proyek Unity Anda

  • Jika Anda belum melakukannya, buka Unity dan buat proyek 2D baru.
  • Siapkan pengaturan proyek Anda, termasuk resolusi dan penargetan platform.

Langkah 2: Impor Aset Game

  • Temukan atau buat aset untuk burung, pipa, dan latar belakang.
  • Impor aset ini ke proyek Unity Anda.

Langkah 3: Buat Flappy Bird

  • Tambahkan sprite 2D untuk burung.
  • Terapkan kontrol ketukan sederhana untuk membuat burung mengepak.
  • Terapkan gravitasi untuk membuat burung jatuh secara alami.

Langkah 4: Mendesain Pipa

  • Buat pipa prefab menggunakan sprite 2D.
  • Siapkan sistem spawn untuk menghasilkan pipa secara berkala.

Langkah 5: Terapkan Logika Permainan

  • Tambahkan sistem penilaian untuk keberhasilan melewati pipa.
  • Terapkan deteksi tabrakan untuk mengakhiri permainan ketika burung menabrak pipa atau tanah.

Periksa skrip di bawah, yang merangkum bagian 3, 4, dan 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!");
    }
}

Skrip Unity yang disediakan merupakan permainan Flappy Bird yang disederhanakan, di mana burung yang dikendalikan pemain menavigasi melalui lingkungan yang bergulir. Burung dapat melompat setelah masukan pengguna, dan permainan memeriksa tabrakan dengan pipa dan tanah, memicu permainan berakhir jika terdeteksi. Pipa muncul secara dinamis pada interval reguler dan bergerak ke arah pemain. Skrip tersebut menyertakan logika untuk menghapus pipa yang berada di luar tampilan kamera untuk mengoptimalkan kinerja. Fungsi 'EndGame' dipanggil setelah tabrakan, dan dapat diperluas untuk menangani berbagai skenario permainan berakhir, seperti menampilkan skor atau memulai ulang permainan. Kode tersebut bertujuan untuk menawarkan implementasi dasar mekanika Flappy Bird dalam lingkungan Unity.

Langkah 6: UI dan Menu

  • Rancang UI untuk menampilkan skor.
  • Buat menus untuk memulai dan memulai ulang permainan.

Langkah 7: Sempurnakan Gameplay

  • Sesuaikan fisika dan kecepatan permainan untuk pengalaman yang seimbang dan menyenangkan.
  • Uji dan ulangi permainan Anda untuk memastikan permainan yang lancar dan menantang.

Langkah 8: Tambahkan Efek Suara

  • Impor atau buat efek suara untuk kepakan sayap, suara tembakan, dan tabrakan.
  • Integrasikan efek suara ini ke dalam permainan Anda.

Contoh modifikasi untuk menambahkan efek suara di '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...
}

Langkah 9: Bangun dan Terapkan

  • Bangun game Anda untuk platform target Anda (iOS, Android, dll.).
  • Terapkan dan uji pada perangkat atau emulator pilihan Anda.

Kesimpulan

Tutorial ini membahas langkah-langkah penting untuk membuat ulang game Flappy Bird klasik ini di Unity. Bereksperimenlah dengan fitur dan penyempurnaan tambahan untuk menjadikan game ini milik Anda. Selamat mengembangkan game!