ゲームプログラミング独学ブログ

ゲームプログラミングを初心者・未経験から独学で身に着けるための情報をまとめていきます。Unityを使った2D・3Dゲームの開発方法やゲームクリエイターになるための情報もまとめていきます。

Unityでスイカゲームを作る方法

【必見】ゲームプログラミング初心者向けのUnityを使ったゲームプログラミング講座サイト「Unity入門の森」の講座ショップ。RPG、アクションゲーム、ノベルゲーム、タワーディフェンス、FPS、レースゲーム、ローグライクゲームと盛りだくさんの講座サイトです。ここで独学でゲーム開発できるようになりました。

Unityを使ってスイカゲームを作成する方法を紹介します。このゲームは、同じ種類の果物を合体させて大きな果物に進化させる、シンプルながらも戦略的なゲームです。初心者にもわかりやすく、Unityの基本操作やスクリプトの書き方を学ぶのに最適です。

プロジェクトの準備

まずは、Unityプロジェクトを作成し、必要なリソースを準備しましょう。

1. プロジェクトの作成

Unityを起動し、新しい2Dプロジェクトを作成します。プロジェクト名は「WatermelonGame」としましょう。

1. Unity Hubを開き、「新規プロジェクト」ボタンをクリックします。

2. 「2D」を選択し、プロジェクト名を「WatermelonGame」と入力します。

3. 「作成」ボタンをクリックしてプロジェクトを作成します。

2. リソースのインポート

イカや他の果物の画像を用意し、Unityプロジェクトにインポートします。これらの画像は後でプレファブとして使用します。

1. スイカや他の果物の画像を用意します。これらの画像はPNG形式で保存しておくと良いでしょう。

2. Unityエディターの「アセット」フォルダー内に「Sprites」フォルダーを作成します。

3. 用意した画像ファイルを「Sprites」フォルダーにドラッグ&ドロップしてインポートします。

ゲームオブジェクトの設定

次に、ゲームの基本的なオブジェクトを設定します。

1. ゲームエリアの作成

ゲームエリアを作成するために、上下左右に壁となる四角形を配置します。これにより、果物がエリア外に出ないようにします。

1. Hierarchyウィンドウで右クリックし、「2Dオブジェクト」 > 「スプライト」 > 「スクエア」を選択します。

2. 作成したスクエアを「BottomWall」と名付け、以下のようにTransformを設定します:


    Position: X = 0, Y = -4.7, Z = 0
    Scale: X = 7, Y = 0.3, Z = 1

3. 同様に「LeftWall」および「RightWall」を作成し、以下のようにTransformを設定します:


    LeftWall:
        Position: X = -3.5, Y = -0.7, Z = 0
        Scale: X = 0.3, Y = 8.3, Z = 1
        RightWall:
    Position: X = 3.5, Y = -0.7, Z = 0
    Scale: X = 0.3, Y = 8.3, Z = 1

2. 果物の作成

果物のプレファブを作成し、それぞれにRigidbody2DとCircleCollider2Dをアタッチします。これにより、果物が物理的に動き、衝突を検知できるようになります。

1. Hierarchyウィンドウで右クリックし、「2Dオブジェクト」 > 「スプライト」 > 「スプライト」を選択します。

2. 作成したスプライトを「Watermelon」と名付け、「Sprites」フォルダー内のスイカ画像をスプライトのSource Imageに設定します。

3. WatermelonオブジェクトにRigidbody2DコンポーネントとCircleCollider2Dコンポーネントを追加します。

4. WatermelonオブジェクトをProjectウィンドウにドラッグしてプレファブにします。

ゲームロジックの実装

ゲームの主要なロジックをスクリプトで実装します。

1. 果物の落下

プレイヤーがクリックすると果物が落下するスクリプトを作成します。


using UnityEngine;
public class FruitDrop : MonoBehaviour
{
private Rigidbody2D _rb;
private bool isDropped = false;
void Start()
{
    _rb = GetComponent<Rigidbody2D>();
}

void Update()
{
    if (Input.GetMouseButtonDown(0) && !isDropped)
    {
        DropFruit();
    }
}

private void DropFruit()
{
    isDropped = true;
    _rb.simulated = true;
}
}

1. Scriptsフォルダーを作成し、その中にFruitDrop.csスクリプトを作成します。

2. FruitDropスクリプトをWatermelonプレファブにアタッチします。

2. 果物の合体

同じ種類の果物が衝突したときに合体し、次の段階の果物に進化するスクリプトを作成します。


using UnityEngine;
public class FruitMerge : MonoBehaviour
{
[SerializeField] private GameObject nextFruit;

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.name == gameObject.name)
    {
        Destroy(collision.gameObject);
        if (nextFruit != null)
        {
            Instantiate(nextFruit, transform.position, Quaternion.identity);
            Destroy(gameObject);
        }
    }
}

}

1. ScriptsフォルダーにFruitMerge.csスクリプトを作成します。

2. FruitMergeスクリプトをWatermelonプレファブにアタッチし、InspectorウィンドウでNext Fruitに次の果物プレファブを設定します。

UIとスコアの実装

最後に、スコアの表示や次に落ちてくる果物の予告をするUIを実装します。

1. スコア管理

スコアを管理し、表示するスクリプトを作成します。


using TMPro;
using UnityEngine;
public class ScoreManager : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI scoreText;
private int score = 0;
public void AddScore(int points)
{
    score += points;
    scoreText.text = score.ToString();
}
}

1. Canvasオブジェクトを作成し、その中にTextMeshPro - Textオブジェクトを追加してスコアテキストを設定します。

2. ScriptsフォルダーにScoreManager.csスクリプトを作成し、Canvasオブジェクトにアタッチします。

3. InspectorウィンドウでScore Textにスコアテキストオブジェクトを設定します。

2. 次の果物の予告

次に落ちてくる果物を表示するUIを作成します。


using UnityEngine;
using UnityEngine.UI;
public class NextFruit : MonoBehaviour
{
[SerializeField] private Image nextFruitImage;
[SerializeField] private Sprite[] fruitSprites;
public void UpdateNextFruit(int index)
{
    nextFruitImage.sprite = fruitSprites[index];
}
}

1. CanvasオブジェクトにImageオブジェクトを追加し、次に落ちてくる果物の画像を表示します。

2. ScriptsフォルダーにNextFruit.csスクリプトを作成し、Imageオブジェクトにアタッチします。

3. InspectorウィンドウでNext Fruit ImageにImageオブジェクトを設定し、Fruit Spritesに果物のスプライトを設定します。

まとめ

  • プロジェクトの作成とリソースのインポート
  • ゲームエリアと果物オブジェクトの設定
  • 果物の落下と合体のロジック実装
  • UIとスコアの管理

これらのステップを順に解説しました。各ステップで行う具体的な作業内容を理解し、Unityでのゲーム開発に役立ててください。継続的に調整を行いながら、より楽しいゲームを作成しましょう。