はじめに
こんにちは!シーバです。
この記事はUnity(ユニティ)を使用したブロック崩しの作り方のメモです。
ゲーム制作の参考にしていただければ嬉しいです。
トグルボタンをクリックすると記事が表示されます。
小さくて見ずらい画像はクリックで拡大できます。
unityとは?
Unityは、ゲーム開発やアプリ開発に利用される人気のあるツールです。初心者にも優れた利点があり、視覚的なエディタで簡単にゲームを構築できます。
プロジェクトの設定
私の場合Android向けに作成したので、プラットホームをFile→BuildSettingからplatformを変更しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/644f4fa7e95bea9b2f8a87fd15404c87.png)
画面サイズは1080×1920の縦画面で設定しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/604f69122f35c68c9b04de6376b780bf-1024x659.png)
画面サイズの変更の仕方はGameタブからDisplay1の横の画面サイズをクリックして変更できます。
画面サイズがない場合は+から自分で好きなサイズを追加することが可能です。
使用アセット
必要なアセットは特にありませんが、私はフォルダなどを見やすくするRainbowfolderというアセットを入れています。
ブロック崩しの基本ルール
ブロック崩しゲームの基本的なルールを簡潔にまとめました。
- ゲームの目的
- プレイヤーの目標は、画面上に配置されたブロックをボールを使って壊すことです。
- コントロール方法
- パドルを左右に動かして、ボールを跳ね返すことができます。一般的には左右の矢印キーまたはタッチ操作が使用されます。
- ブロックの配置
- 画面上部には複数のブロックが横一列または複数列に配置されています。
- ボールの動き
- ゲームが始まると、画面下部からボールが発射され、ブロックに当たると跳ね返ります。
- 得点の計算
- ボールがブロックに当たるたびに、得点が加算されます。各ブロックには壊すのに必要なヒット数が設定されており、それが0になるとブロックは壊れます。
- ミスとゲームオーバー
- プレイヤーがボールをミスして画面下部に落とすと、ライフが減少します。ライフがなくなるとゲームオーバーとなり、ゲームが再スタートされるか終了します。
- レベルの進行
- 一定の条件を満たすと、新しいレベルに進むことができます。新しいレベルでは、ブロックの配置やボールの速さなどが変化し、難易度が上がります。
- 特殊アイテム
- 一部のブロックを壊すとアイテムが出現し、取ることでパドルやボールに特殊な効果が生じることがあります。例えば、ボールが加速する、パドルが広がるなど。
これらの基本ルールに従いながら、プレイヤーはブロックを壊し、できるだけ高いスコアを目指してゲームを進めます。
私の作成したブロック崩しのAndroidアプリを張っておきますので、参考程度に遊んでもらえたらうれしいです。
背景色の変更
ゲームオブジェクトの配置
ブロック崩しゲームで使う主なゲームオブジェクトを配置しよう!
壁の配置
まずはボールが跳ね返ったりする壁を作ろう!
まずゲームの枠ボールが跳ね返ったりする壁を追加します。
1.Hierarchy画面を右クリックして、2Dobject→Sprite→Squareを作成します。
![](https://cbagames.jp/wp-content/uploads/2023/12/a721435168dd7995be5d478f7d9bdda8-1024x706.png)
2.SceneタブのRectツールを選択してSquareのサイズを変更します。
![](https://cbagames.jp/wp-content/uploads/2023/12/9b2994d9e6137b43f3b8b016137f3f36-1.png)
3.Squareオブジェクトのinspecterの一番下にあるaddComponentからBoxColider2dを追加して衝突判定を付けます。
![](https://cbagames.jp/wp-content/uploads/2023/12/d61287a5721ba4d05f3a3597d1eb7264.png)
4.SquareをCtrl+Dでコピーして画面を囲うように配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/29029453d6a4a6a89befc7bf70023c79.png)
壁の配置はこれで完了です!
空のオブジェクトを作成してWallを選択してドラッグ&ドロップしてまとめておこう!
名前を変更してどのオブジェクトかわかりやすくしておこう!
![](https://cbagames.jp/wp-content/uploads/2023/12/43b3100d5e6bd498eee44fa44daa751d.png)
パドル(プレイヤー)の追加
パドルはプレイヤーが操作する部分です。以下の手順でパドルを追加します。
1.メニューバーの「GameObject」をクリックし、「2D Object」を選択します。
2.「Sprite」を選択して新しいスプライトオブジェクトを作成します。
私はCapsuleを作りました。名前をPlayerなどに変更するとわかりやすいです。
![](https://cbagames.jp/wp-content/uploads/2023/12/6a526a6ed4742423f0ef58f49e8fe0b1.png)
3.inspecter画面からPlayerのサイズと位置を調整します。
![](https://cbagames.jp/wp-content/uploads/2023/12/10dde3e3c01062a9a60567ce306a2c58-1024x632.png)
GravityScaleを0にしないと再生した時に重力が働いているのでPlayerが落下してしまいます。
![](https://cbagames.jp/wp-content/uploads/2023/12/85e10a1e9e70ce12eee9fdad0f94db03-1024x633.png)
Playerは左右にしか移動できないようにするのでConstraintsのFreezeRotationのYにチェックを入れます。
FreezeRotationのZにもチェックを入れて、ボールが当たった時にPlayerが回転してしまうのを防ぐようにします。
1.空のフォルダを作成します。フォルダ名はScriptsにしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/44f75c64275500d25b704ff31fa123e3.png)
2.Create→C#Scriptでプレイヤーのスクリプトを作成します。
ファイル名はPlayerにしました。
3.作成したC#ScriptをPlayerにドラッグ&ドロップします。
![](https://cbagames.jp/wp-content/uploads/2023/12/08bd8b4f7635161b3881af4648e62262-1024x725.png)
PlayerC#ScriptをダブルクリックするとVisualStudioが開きます。
入力すると矢印キーを押したときに左右に動かせるようになります。
PlayerSpeedという変数で移動速度を変更します。
Inspector画面からPlayerSpeedを変更できます。
私の場合は0.1くらいがちょうどいい速度でした!
![](https://cbagames.jp/wp-content/uploads/2023/12/611b2228376318287df450426710afce.png)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player: MonoBehaviour
{
//プレイヤーの移動速度
public float PlayerSpeed = 1.0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{ //右矢印を押している間右に動かす
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(0.1f*PlayerSpeed, 0, 0);
}
//左矢印を押している間左に動かす
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position += new Vector3(-0.1f*PlayerSpeed, 0, 0);
}
}
}
ボールの作成
2.Ballオブジェクトのinspecter画面のaddComponentからRigidbody2Dを追加します。
![](https://cbagames.jp/wp-content/uploads/2023/12/cf31ab084cd71b7aacaa2abf699b0b39.png)
Rigidbody2DのAngular DragとGravityScaleを0にします。
Mass(質量)は100ぐらいに設定しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/3e7ec943c69f15a4e595875c816cd3be.png)
3.Ballオブジェクトのinspecterの一番下にあるaddComponentからCircleCollider2Dを追加します。
![](https://cbagames.jp/wp-content/uploads/2023/12/4681be77b961edb5965ebf6adb8b4ad4.png)
5.Create→2DからPhysicsMaterial2Dを作成します。名前はballにしておきます。
![](https://cbagames.jp/wp-content/uploads/2023/12/2e9b5d901cdbc9e92412f86a487dff2b.png)
BallのRigidbody2DにPhysicsMaterial2Dを追加します。
![](https://cbagames.jp/wp-content/uploads/2023/12/440aaf9e3e44053630b610b4f08436eb.png)
Create→C#Scriptでプレイヤーのスクリプトを作成し下のコードを入力します。
このC#Scriptをボールにドラッグ&ドロップしてください。
ボールの速度はInspector上で調整できるようにpublicにしています。この値を変えて速度を変更することができます。
![](https://cbagames.jp/wp-content/uploads/2023/12/53dd56a3642b1408ba504ce3ac914534.png)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
//ボールの速度
public float speed = 5f;
Rigidbody2D myRigidbody;
void Start()
{
//ボールを動かす
myRigidbody = GetComponent<Rigidbody2D>();
myRigidbody.velocity = new Vector3(speed, speed, 0f);
}
// Update is called once per frame
void Update()
{
}
}
ブロックの作成
3.Blockのサイズを調整しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/c5182f227838c58976916fcbf6677002.png)
4.Blockオブジェクトのinspecterの一番下にあるaddComponentからBoxColider2Dを追加します。
![](https://cbagames.jp/wp-content/uploads/2023/12/d61287a5721ba4d05f3a3597d1eb7264-1.png)
Create→C#Scriptでブロックのスクリプトを作成し下のコードを入力します。
このC#Scriptをブロックにドラッグ&ドロップしてください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Block : MonoBehaviour
{
private void OnCollisionEnter2D(Collision2D collision) //オブジェクトが衝突したときに
{
if (collision.gameObject.tag == "Ball")//相手のタグがBallなら
{
Destroy(this.gameObject);//自分を消す
}
}
}
色の変更
1.Create→Materialでマテリアルを作成します。
![](https://cbagames.jp/wp-content/uploads/2023/12/8fb3fb482b926450111a9aad645567fc.png)
Albedoをクリックすると色を変更できます。赤に変更してみました。
sourceのMetallicAlphaをAlbedoAlphaに変更するとメタリックレッドから普通のレッドになります。
![](https://cbagames.jp/wp-content/uploads/2023/12/f146f01855635573140397c99883b3e3.png)
2.作成したマテリアルを色を変更したいオブジェクトにドラッグ&ドロップしてみましょう。
![](https://cbagames.jp/wp-content/uploads/2023/12/65aceddbf46c97eaba5516ed2b2743d6.png)
プレイヤーにドラッグ&ドロップしてみました。色は変わりましたが暗いままです。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-26_200719.png)
3.MainCameraを右クリックLight→DirectionalLightをクリックしてメインカメラにライトを追加して光を当てます。
![](https://cbagames.jp/wp-content/uploads/2023/12/a5e4ec4bae14cfe99a0ae08fa3f0ce38.png)
追加するとこのように赤く表示されるようになります。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-26_201134.png)
同じ方法でボールやブロックの色も変更することができます。
別々の色にする場合は新たにマテリアルを作成して貼り付ければOKです。
実際に動かしてみよう!
ゲームウィンドウの上にある再生マークを押すと実際に動かすことができるよ!
![](https://cbagames.jp/wp-content/uploads/2023/12/9698904d981eb2fc43f40eb5d0531b48.png)
ここまで作り再生してみるとるとこんな感じになっていると思います。ボールやプレイヤーの速度などはお好みで調整してください。
これで基本的なブロック崩しゲームの仕組みができました。詳細な設定やデザインの追加は、ゲームの面白さを向上させるために自由に行いましょう。
ゲームオーバーを実装する
テキストとボタンを作成します。
サイズと位置を調整したら非表示にしておきます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bottom : MonoBehaviour
{
public GameObject gameovertext;
public GameObject retrybutton;
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ball"))
{
retrybutton.SetActive(true);
gameovertext.SetActive(true);
Destroy(collision.gameObject);
}
}
}
空のオブジェクトを作成します。名前はGamemanagerにしました。
インスペクター画面からテキストとボタンを設定します。
![](https://cbagames.jp/wp-content/uploads/2024/03/2024-03-09_030030.png)
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public void Retry()
{
//("")の中に現在のーシーン名を入力する
SceneManager.LoadScene("TestGame");
}
}
リトライボタンを押したときの処理を設定します。
![](https://cbagames.jp/wp-content/uploads/2024/03/2024-03-09_030158.png)
まとめ
いかがでしたか?この記事を通じて、Unityで2Dブロック崩しゲームを作る基本的な流れをご紹介しました。もちろん、これだけで全てをカバーしているわけではありませんが、Unityの基本的な使い方やゲーム開発の流れを掴むことができたはずです。Unityは非常に強力なツールで、学ぶほどにその可能性を広げてくれます。今回学んだことを基に、さらに自分だけのゲームを作ってみてください。