Unity で Flappy Bird にインスピレーションを得たゲームを作成する方法

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

ステップ 1: Unity プロジェクトをセットアップする

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

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

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

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

  • 鳥の 2D スプライトを追加します。
  • 鳥を羽ばたかせるための簡単なタップ コントロールを実装します。
  • 重力を適用して鳥を自然に落下させます。

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

  • 2D スプライトを使用してパイプ prefab を作成します。
  • 定期的にパイプを生成するスポーン システムをセットアップします。

ステップ 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 を設計します。
  • ゲームを開始および再起動するための menus を作成します。

ステップ 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 ブリックブレイカー ゲームを作成する
Unity 用エンドレス ランナー チュートリアル
Unity のミニゲーム | フラッピーキューブ
Unity でスライディング パズル ゲームを作成する
Unity のミニゲーム | CUBE回避
Unity のマッチ 3 パズル ゲームのチュートリアル
ファームゾンビ | Unity での 2D プラットフォーマー ゲームの作成