Unity'de Flappy Bird'den Esinlenilen Bir Oyun Nasıl Yapılır

Bu Unity eğitiminde, Flappy Bird oyunu oluşturma sürecini ele alacağız. Bu klasik mobil oyun, bir kuşu bir dizi borudan geçirerek kanat çırpmasını ve engellerden kaçınmasını sağlamayı içerir. Adım adım talimatlara bir göz atalım.

Adım 1: Unity Projenizi Kurun

  • Eğer henüz yapmadıysanız, Unity'i açın ve yeni 2D proje oluşturun.
  • Çözünürlük ve platform hedeflemesi dahil olmak üzere proje ayarlarınızı yapın.

Adım 2: Oyun Varlıklarını İçe Aktar

  • bird, pipes ve background için varlıkları bulun veya oluşturun.
  • Bu varlıkları Unity projenize aktarın.

Adım 3: Flappy Bird'ü Oluşturun

  • Kuşa 2 boyutlu bir sprite ekleyin.
  • Kuşun kanat çırpmasını sağlamak için basit dokunma kontrollerini uygulayın.
  • Kuşun doğal olarak düşmesini sağlamak için yer çekimini uygulayın.

Adım 4: Boruları Tasarlayın

  • 2D sprite'ları kullanarak prefab boyutunda bir boru oluşturun.
  • Düzenli aralıklarla boru üretecek bir yumurtlama sistemi kurun.

Adım 5: Oyun Mantığını Uygulayın

  • Borulardan başarıyla geçmeye yönelik bir puanlama sistemi ekleyin.
  • Kuşun borulara veya yere çarpması durumunda oyunu sonlandırmak için çarpışma algılama özelliğini uygulayın.

Aşağıdaki betiği inceleyin, 3, 4 ve 5. bölümleri kapsıyor.

'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!");
    }
}

Sağlanan Unity betiği, oyuncunun kontrol ettiği kuşun kayan bir ortamda gezindiği basitleştirilmiş bir Flappy Bird oyununu temsil eder. Kuş, kullanıcı girdisi üzerine zıplayabilir ve oyun, hem borularla hem de zeminle çarpışmaları kontrol eder ve tespit edilirse oyun biter. Borular düzenli aralıklarla dinamik olarak oluşturulur ve oyuncuya doğru hareket eder. Betik, performansı optimize etmek için kamera görünümünün dışına çıkan boruları kaldırmak için mantık içerir. 'EndGame' işlevi çarpışma üzerine çağrılır ve bir skoru görüntüleme veya oyunu yeniden başlatma gibi çeşitli oyun bitme senaryolarını ele almak üzere genişletilebilir. Kod, bir Unity ortamında Flappy Bird mekaniğinin temel bir uygulamasını sunmayı amaçlamaktadır.

Adım 6: Kullanıcı Arayüzü ve Menüler

  • Puanı görüntülemek için bir kullanıcı arayüzü tasarlayın.
  • Oyunu başlatmak ve yeniden başlatmak için menüler oluşturun.

7. Adım: Oyun Oynanışını İnce Ayarlayın

  • Dengeli ve keyifli bir deneyim için oyunun fizik ve hızını ayarlayın.
  • Akıcı ve zorlu bir oyun deneyimi sağlamak için oyununuzu test edin ve üzerinde tekrarlar yapın.

Adım 8: Ses Efektleri Ekleyin

'FlappyBird.cs':'ya ses efektleri eklemek için örnek değişiklikler

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...
}

Adım 9: Oluşturun ve Dağıtın

  • Oyununuzu hedef platformunuz (iOS, Android vb.) için oluşturun.
  • Seçtiğiniz cihazda veya emülatörde dağıtın ve test edin.

Çözüm

Bu eğitim, bu klasik Flappy Bird oyununu 'ü Unity'de yeniden yaratmak için gerekli adımları kapsar. Oyunu kendinize ait kılmak için ek özellikler ve geliştirmelerle deneyler yapın. İyi oyun geliştirmeler!