Unity で Flappy Bird 風のゲームを作る方法

この Unity チュートリアルでは、Flappy Bird ゲーム の作成手順を説明します。この古典的なモバイル ゲームでは、タップして鳥を羽ばたかせ、障害物を避けながら一連のパイプを鳥が通るように誘導します。ステップ バイ ステップの説明を見てみましょう。

ステップ1: Unity プロジェクトを設定する

  • まだ作成していない場合は、Unityを開いて新しい2Dプロジェクトを作成してください。
  • 解像度やプラットフォームのターゲット設定など、プロジェクト設定をセットアップします。

ステップ2: ゲームアセットをインポートする

  • 鳥、パイプ、背景のアセットを検索または作成します。
  • これらのアセットを Unity プロジェクトにインポートします。

ステップ3: Flappy Birdを作成する

  • 鳥の 2D スプライトを追加します。
  • 鳥が羽ばたくように、簡単なタップ コントロールを実装します。
  • 重力を利用して鳥が自然に落ちるようにします。

ステップ4: パイプを設計する

  • 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' 関数は衝突時に呼び出され、スコアの表示やゲームの再開など、さまざまなゲームオーバー シナリオを処理するように拡張できます。 このコードは、Unity 環境内で Flappy Bird のメカニクスの基本的な実装を提供することを目指しています。

ステップ6: UIとメニュー

  • スコアを表示するための UI を設計します。
  • ゲームの起動と再起動のためのメニューを作成します。

ステップ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 など) 向けにゲームを構築します。
  • 選択したデバイスまたはエミュレータにデプロイしてテストします。

結論

このチュートリアルでは、Unityでこの古典的なFlappy Birdゲームを再現するための基本的な手順について説明します。追加機能や改良を試して、自分だけのゲームを作りましょう。ゲーム開発を楽しんでください!