i-Vinci TechBlog
株式会社i-Vinciの技術ブログ

Unityでスイカゲームを作るための準備

こんにちは、新木です。久しぶりにゲームを作りたくなったので、この記事に作り方をまとめます。少し前に流行ったスイカゲームを作成しようと思います。記事が長くなるため、何回かに分けてお届けします。(書く気力があれば…!)

ゲームを作る際は、まず大まかな構成を考えます。スイカゲームの場合、枠内に物が落ちてきて、同じものが当たると一段階大きくなるという流れです。これを考えることで、何を作るべきか明確になります。

使用する言語は C# で、開発環境として UnityVisual Studio を使用します。

始める前に

まず、Unityの環境を構築します。今回は2Dプロジェクトを使用するので、「新しいプロジェクト」から「2D」を選択してプロジェクトを作成してください。これで環境の準備は完了です。

ステージの作成

この記事を読んでいる方は大体がUnity初心者だと思うのでオブジェクトの生成方法から説明します。

「Hierarchy」パネルで右クリックし、「2D Object」→「Sprites」→「Square」を選択します。

Unity画面

四角いオブジェクトがScene画面に表示されます。これを壁や床に使用します。

同じ手順で四角形を3つ生成し、それぞれのオブジェクトの「Inspector」の「Transform」を以下のように設定します。底面のオブジェクトは「Bottom」、壁のオブジェクトは「Wall」と名付けます。

Unity画面
Unity画面
Unity画面

このままだと当たり判定がないので「AddComponent」から「BoxCollider2D」をアタッチします。

BoxCollider2Dは当たり判定を計算するコンポーネントです。

BoxCollider2D

落とすものの生成

次に、落下させる果物を作成します。「2D Object」→「Sprites」から「Circle」を追加します。

BoxCollider2D

TransformのScaleを変更し、「AddComponent」から「Rigidbody2D」と「CircleCollider2D」をアタッチします。

2D

CircleCollider2Dも当たり判定を計算するコンポーネントで、Rigidbody2Dは物理挙動を再現します。これでステージ(枠)と果物の準備ができました。

スクリプト

物体を配置しただけでは、落ちて当たったり、消えたりしません。スクリプトが必要です。最初に果物を落とすスクリプトを作成します。

「Assets」フォルダで右クリックし、「Create」→「C# Script」を選択します。名前は「Seed」にします。

script

作成したスクリプトをVisual Studioで開いて編集します。

using UnityEngine;

public class Seed : MonoBehaviour
{
    private Rigidbody2D _rb;
    private bool isDrop = false;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetMouseButton(0) && isDrop == false)
            Drop();

        if (isDrop) return;

        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        mousePos.x = Mathf.Clamp(mousePos.x, -2.7f, 2.7f);
        mousePos.y = 3.5f;

        transform.position = mousePos;
    }

    private void Drop()
    {
        isDrop = true;
        _rb.simulated = true;
    }
}

void Start() { _rb = GetComponent\(); } : Startの「Start」メソッドは、オブジェクトが初めてアクティブになったときに一度だけ呼び出されます。ここでは、Rigidbody2Dコンポーネントを取得して_rbに格納しています。

void Update() {...} : Updateメソッドは、毎フレーム呼び出されます。ここでは、マウスの左クリックが押されていて、かつisDropがfalseの場合、Dropメソッドを呼び出します。また、isDropがtrueの場合、以降のコードは実行されません。isDropがfalseの場合、マウスの位置を取得し、その位置を制限した上でオブジェクトの位置を更新します。

private void Drop() {...} : Dropメソッドは、isDropをtrueに設定し、Rigidbody2Dのシミュレーションを有効にします。これにより、物理的な挙動(重力など)がオブジェクトに適用されます。

スクリプトが書けたら先ほど作成したSeedにアタッチします。
「Assets」からスクリプトを「Hierarchy」の「Seed」にドラッグ&ドロップすることでアタッチできます。
アタッチ出来たらSeedの「Rigidbody2D」の「Simulated」のチェックを外します。

Simulated

テスト

一度実行してみましょう。実行方法はUnity画面中央上部の再生マークのボタンでできます。
実行するとマウスを動かすと物体が横に動き、マウスクリックで物体が下に落ちます。

Start

おわりに

今回はここまでです。続きはまたいつか書こうと思います。ゲーム制作は皆さんが思っている以上に簡単なので作ってみたいものがあれば作成してみてはいかがでしょうか。