ブロック崩しは昔からゲーム開発者の入門用として最適なゲームです。

以前は2Dの座標計算で開発されるのがスタンダードだった様ですが、今は3Dで、かつ物理エンジンを使用したものが増えてきています。

Unityなどの開発エンジンを使用すれば3Dで物理エンジンを使用したブロック崩しを簡単に作る事ができます。それにブロック崩しを作る事で、Unityの使い方の勉強にもなります。

今回は3Dの物理エンジンを活用したブロック崩しを作ってみたいと思います。

環境準備・参考情報等

環境準備・参考にした情報等は以下になります。

非常に分かりやすい参考動画を見つけたので、そちらを見ていただければほぼ大丈夫かも。

環境設定等

環境設定は以下になります。

■Unityのバージョン ※どんなバージョンでもおそらく大丈夫です

  • Unity 2019.4.19

■プロジェクトのテンプレート

  • 「3D」テンプレートを使用

参考情報(ゲームクリエイター「ひろはすさん」の動画が分かり易い過ぎる!)

さて、一からブロック崩しの作り方を紹介しながら、自分も作ってみようと思ったのですが、既に非常に分かりやすく解説されている動画を見つけました。

ゲームクリエイターでYouTuberとしても活躍されている「ひろはすさん」の動画です。まずそちらを紹介します。

■「ひろはすさん」のUnity入門動画(中盤あたりからブロック崩しの開発が始まります)

こちらの動画を参考にさせていただいた上で、各オブジェクトの設定方法をまとめたり、細かい部分のアレンジの仕方などを紹介したいと思います。

ちなみに、前半はUnityの使い方を紹介している動画なので、Unityにふれるのが初めてという場合は前半も非常に参考になります。

Unityで作る3Dブロック崩し

ではさっそく3Dのブロック崩しを作成していきましょう。

システム開発時の「詳細設計」をするイメージで以下の点について私の方でも少しまとめましたので、良ければ参考にして下さい。

  • 3Dオブジェクトの情報(どんなオブジェクトが必要か)
  • 物理エンジンの設定情報
  • C#スクリプトについて

※特に物理エンジンの設定についてはすごく勉強になります。

3Dオブジェクト

まず、準備するオブジェクトは以下になります。全てUnityのプリミティブで作れます。

作成する3Dオブジェクトの設定情報
作成するオブジェクト 役割・設定情報 作成方法例
プレイヤー プレイヤーが操作する台座で、移動は左右のみ。転がってきたボールを打ち返す。 Unityのプリミティブオブジェクト「Cube」で作成。
ボール ブロックを崩すためのボール。 Unityのプリミティブオブジェクト「Sphere」で作成。
ボールが転がる床 Unityのプリミティブオブジェクト「Cube」もしくは「Plane」で作成。
ステージの一部。四方に配置。ボールがぶつかると跳ね返る。 Unityのプリミティブオブジェクト「Cube」で作成。
ブロック ボールが当たると消える。 Unityのプリミティブオブジェクト「Cube」で作成。

※マテリアルの付け方なども「ひろはすさん」の動画で紹介されていますので、そちらを参考にすると、簡単にできてしまいます。

オブジェクトを配置

上記の設定通りに、各オブジェクトを配置して、ブロック崩しのゲームステージ&プレイヤーを作成しました。

■ゲームステージ&プレイヤーを作成

物理エンジンの設定情報

今回は物理エンジンを設定するのはボールの3DオブジェクトだけでOKです。

ブロック崩しは簡単なゲームなので、物理エンジンはボールに設定するだけで必要な設定が全てできてしまうのです。

Physic Material(物理特性マテリアル)を設定

ボールに付与する「物理特性マテリアル」も設定していきましょう。

■Physic Material(物理特性マテリアル)の設定内容

Physic Material(物理特性マテリアル)の設定内容は以下になります。

プロパティ 機能 設定内容
Dynamic Friction 移動しているオブジェクトの摩擦 0に設定しておく事で、ボールのスピードが常に一定になる
Static Friction 止まっているオブジェクトの摩擦 0に設定しておく事で、ボールのスピードが常に一定になる
Bounciness 弾力(跳ね返り) 1に設定しておく事で、壁やブロックと衝突した後もボールのスピードが常に一定になる
Friction Combine オブジェクト同士が衝突した時の摩擦

  • Average(摩擦が2つのオブジェクトの平均値になる)
  • Minimum(摩擦が小さい方が採用される)
  • Maximum(摩擦が大きい方が採用される)
  • Multiply(摩擦が乗算される)
今回は摩擦を0にしておきたいので「Minimum」を選択
Bounce Combine オブジェクト同士の衝突後の弾力(跳ね返り)を設定 今回は弾力(跳ね返り)を1にしておきたいので「Maximum」を選択
■Physic Material(物理特性マテリアル)の設定方法

「物理特性マテリアル」の設定方法は以下になります。

ボールに設定されているcolliderのマテリアルにアタッチできます。

ProjectウィンドウでPhysic Materialを作成する事ができます。

■Physic Materialの設定

Physic Materialの設定情報は以下の通りとなります。

■Physic Materialの設定情報

ボールのコライダーのMaterialにPhysic Materialを設定します。

■コライダーのMaterialにPhysic Materialを設定

RigidBody(物理特性)を設定

ボールの「物理特性」も設定していきましょう。

まずはボールのオブジェクトにRigidBodyを適用しましょう。

手動で設定が必要なのはConstraintsというプロパティです。こちらを設定しましょう。

Constraintsの設定内容

Constraintsに設定する内容は以下になります。

■Constraints (RigidBodyの制約) の情報

プロパティ 機能 設定内容
Freeze Position ワールド座標軸でオブジェクトの移動停止
※X、Y、Zそれぞれの座標軸を設定
Yにのみチェックを入れる(Y軸は物理制限がかかるので反発しない)
Freeze Rotation ローカル座標軸でオブジェクトの回転停止
※X、Y、Zそれぞれの座標軸を設定
X,Y,X全てにチェックを入れる(全ての座標軸上で回転はしない)

※RigidBodyの参考URL:https://docs.unity3d.com/ja/2019.4/Manual/class-Rigidbody.html

Constraintsの設定方法について

RigidBodyのConstraintsで設定ができます。

Constraintsの内容

C#スクリプトについて

各オブジェクトにアタッチするC#スクリプトについても情報をまとめました。

■オブジェクトにアタッチするC#スクリプト情報

C#スクリプトをアタッチするオブジェクト C#スクリプトの概要 備考
プレイヤー
  • 左矢印を押すと、左方向に移動(条件:左の壁よりもプレイヤーが右の位置にある場合)
  • 右矢印を押すと、右方向に移動(条件:右の壁よりもプレイヤーが左の位置にある場合)
  • 移動時の速度をUnityエディタから設定できる様にしている
  • Time.deltaTimeで移動速度をコントロール
左右の壁の位置を変更する場合は、移動時の条件(X軸)の値を変更する必要あり。
ボール
  • Start関数でボールを右上に移動させる(RigdBodyのAddForce関数で移動させている)
  • 移動時の速度をUnityエディタから設定できる様にしている
時オブジェクトのコンポーネント情報を取得する際は「this.GetComponent<>()」を使用する。
※<>の中にコンポーネント名が入ります。
ブロック ・ボールが当たった場合消える(OnCollisionEnter関数を使用) ブロック崩しではOnCollisionEnterの引数は未設定でもOK(何がぶつかっても消える設定)。

「ステージ内でプレイヤーを左右に操作して、移動してくるボールを弾き、ボールがブロックにぶつかったら、ブロックが消える」という処理を実装しています。

各オブジェクトの設定情報やアレンジの仕方

さらに、以下の様な処理を実装して各オブジェクトの設定情報を追加・変更できる様になると、色々なアレンジを加えたり、自分オリジナルのブロック崩しを作れます。

アレンジ例

  • ボールの移動速度を変える⇒難易度調整ができる
  • 邪魔なブロックを作る⇒消えない邪魔ブロックを作る事で難易度調整ができる
  • 邪魔するキャラクターを作る⇒難易度調整ができる、オリジナル感がでる
  • 各オブジェクトのを変える⇒オブジェクトの形を変える事で見た目を派手にできてオリジナル感がでる
  • ステージの大きさ(床・壁)を変える⇒難易度調整ができる、オリジナル感がでる
  • ブロックの数を変える⇒難易度調整ができる、オリジナル感がでる

この様に、様々なアレンジを加える事で、自分なりのゲーム作りができます。

さらに、ゲームのクリア、リスタート、タイトル画面などを実装、複数ステージを作成して、ステージ間を遷移できる様にする事で立派なゲームになります。

3Dのブロック崩しを動かしてみる

3Dのブロック崩しを実装したので動かしてみましょう。

ゲームスタート

ゲームスタート時はボールが右上に転がりだし、プレイヤーを左右に操作できるようになります。

そして、ボールがブロックにぶつかると、ブロックが消えます。

■ゲームスタート後の実行画面

ゲームオーバー

プレイヤーの台座でボールを打ち返す事ができず、ボールが下の壁にぶつかってしまうと、ゲームオーバーになります。

以下の場合は、下の壁にぶつかった後、ボールが消えるだけの挙動になっていますが、「ゲームオーバー」のUIを画面に表示してあげるとより良いです。

■ゲームオーバー

ゲームクリアー

全てのブロックを消すと、ゲームクリアーになります。

ゲームオーバーの場合は何もUIを表示しませんでしたが、クリアー時は「GAME CLEAR」のテキストを表示しました。

■ゲームクリアー

まとめ

今回はUnityで3Dのブロック崩しを作ってみました。

※ひろはすさんの動画をかなり参考にさせていただきました。本当に分かりやすいのでUnityの使い方を覚えたり、ブロック崩しの作り方を覚えたい場合はオススメです。

ブロック崩しは、他にも様々なゲームクリエイターの方がゲーム開発の入門としてオススメしています。(Unity入門のゲームとしても良い!)

さらに、細かい部分をアレンジする事で自分なりのオリジナルのブロック崩しを作る事もできるので、作るのがすごく面白いです!

ぜひ、チャレンジしてみて下さい!