ブロック崩しゲームを状態管理中心に作成。Part1.ゲーム部分【Unityゲーム制作】

これまで、簡単なゲームをいくつか作成していきましたが、今回は「状態管理(ステータス管理)」を意識してゼロからゲームを作成していきます。初心者向けと言うことで、物凄く簡単な初歩的な流れです。

はじめに

今回作成するゲームは「ブロック崩し」ですが、ゲーム部分はサラッといき「メニュー」から「ゲーム」への遷移などを意識していきます。複雑なゲームほど様々な「状態管理(ステータス管理)」が出てきますが、今回はかなりシンプルな形で作成していきます。

ゲームの流れイメージ

簡単なイメージは下記のような感じです。「メニュー画面」があって「ゲーム画面」に移動して「終了画面」を表示する、これが目に見える部分です。「初期化」や「次へ(次のステージ)」は内部的な状態ですね。

Unityバージョン

Unityのヴァージョンは2020.3.19f1、テンプレートは2Dを利用していきます。プロジェクト名は「2DBreakoutStatus」としておきます。

ゲーム部分の作成

まずはゲーム部分の作成です。ブロック崩しゲームの作成方法は良く紹介されていて、初心者でも簡単に作れたりします(簡単なものであれば)。今回、この部分はサラッといきます。

ボールとバーの作成

まずは「ボール」と「バー」を作成。ヒエラルキーメニューで「2Dオブジェクト」→「スプライト」から「円」と「正方形」を追加。

それぞれ名前を「Ball」と「Player」にして、サイズと位置を下記のような感じで変更しておきます。

重力の影響を無しにして、ボールに対してバーの質量を十分に大きくしておきます。

ボールとバーのスクリプト作成

新規スクリプトを作成し、それぞれのオブジェクトにくっつけます。

Ballsスクリプトの中身は下記のように変更。ボールが動くスクリプトですね、ぶつかったら方向が変わるようにしてあります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Balls : MonoBehaviour
{
    float _speed = 7.0f;
    Rigidbody2D _rigidbody;
    Vector2 _velocity;

    void Start()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
        _rigidbody.velocity = Vector2.down * _speed;

    }

    void FixedUpdate()
    {
        _rigidbody.velocity = _rigidbody.velocity.normalized * _speed;
        _velocity = _rigidbody.velocity;
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
        _rigidbody.velocity = Vector2.Reflect(_velocity, collision.contacts[0].normal);
    }
}

バー(プレイヤー)のスクリプトは下記のように変更、マウスの動きあわせてバーが動くようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    Rigidbody2D _rigidbody;

    void Start()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
    }
    void Update()
    {
        _rigidbody.MovePosition(new Vector2(Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, 0)).x, -4));
    }
}

ここで一旦動かしてみてボールが落ちてきて、バーがマウスで動かせてボールが跳ね返ればとりあえずOK。

壁とブロックの作成

次に壁を作成します。ヒエラルキーで「空のオブジェクト」を追加し、名前を「Walls」に。その中に「2Dオブジェクト」→「スプライト」→「正方形」を追加、名前を「TWall」にしてサイズと位置を変更、コライダーを追加。上の壁にします。

TWallをコピーして左壁と右壁も作成。

次に実際に壊すブロックを作成、「空のオブジェクト」を追加し、名前を「Blocks」に。中に「2Dオブジェクト」→「スプライト」→「正方形」を追加、名前を「Block」にしてサイズと位置を変更。

ブロックをプレハブ化して、複製。

下記のような感じにします。お好みで何個でも大丈夫です。

後はBlockと言う名前でスクリプトを作成してBlockプレハブにくっつけます。Blockスクリプトの中身は下記に変更。ぶつかったらオブジェクトが消えるようにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Block : MonoBehaviour
{
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Destroy(gameObject);
    }
}

一旦、これでゲーム部分は仮完成。ボールがぶつかり、ブロックが消えればOK。次回からは実際にメニューからゲーム画面の遷移などを作成していきます。

タイトルとURLをコピーしました