第 2回 ゲームルールを構築しよう

破壊可能なブロックの追加

破壊可能なブロックを作成して行きましょう。

まずは破壊可能なるブロックを 1つ作成します。ラケットと同様に、適当な位置に細長い立方体を配置しましょう。こちらも壁やボールと高さを合わせるため、 Transform のPosision Y座標を 0 にすることを忘れないように注意します。また立方体の名前は Block1 としておいて下さい。

今度はプロジェクトパネル上でCreateJavascriptを選択します。新しいスクリプトがプロジェクトに追加されますので、名前を「BlockContoller」とします。

次に「BlockContoller」スクリプトを編集します。以下のコードを記述して下さい。

function OnCollisionEnter(collision: Collision) {
	Destroy(gameObject);
}

この OnCollisionEnter は、Rigidbody で動作しているオブジェクト(例えばボール等)が接触したときに呼ばれる処理です。引数(collision)には接触対象のオブジェクトが含まれます。
そして 2行目の Destroy メソッドで gameObject、つまりコンポーネントを実行したオブジェクトつまり接触したブロックを削除しています。

最後に「BlockContoller」スクリプトを「Block1」オブジェクトに追加します。 これで Block1 に「ボールと接触した際に削除される」機能が追加されました。

さっそく実行してみましょう。上手くブロックは削除できましたか?


ブロックの配置

作成したブロックを早速量産してみましょう。 ただし、単純に追加するとブロックが大量にヒエラルキービューに配置され、管理が難しくなります。そのため、まずは空のゲームオブジェクトを作成し、その中で配置していきましょう。
ただし、ブロックを量産すると一度に変更する事が面倒になります。そのためまずはブロックの雛形を作成しましょう。

方法は簡単、先ほど作成した「Block1」を Projectビューにドラッグ&ドロップして下さい。Hierarchy ビューの Block1 の文字が青くなり、Project ビューに Block1 と同名のオブジェクトが作成されます。
この雛形についての説明は後ほどしますので、今は画面を作って行きましょう。

Project ビュー
Project ビュー

Hierarchy ビュー
Hierarchy ビュー

ただし、このままでは Hierarchyビューがゴチャゴチャしてしまうので、少し整理します。

まずはGame ObjectCreate Emptyで空のゲームオブジェクトを追加し、名前を Blocks に変更します。この時、Block の座標は(x:0, y:0, z:0)にしておくと良いでしょう。
次に Hierarchy にある Block1 を Blocks にドラッグ&ドロップします。すると Blocks の下に Block1 が入った事が確認できます。

この状態を親子関係と言います。この場合は Blocks が親、Block1 が子に当たります。
の時、親の座標やスケール情報を子は受け継ぐので、一括でオブジェクトを動かしたりする際に有効です。

Project ビュー
Project ビュー

後は Block をコピー&ペーストして Block を画面上に敷き詰めてみましょう。

Blockのコピーは、Hierarchy のBlock1を右クリックしCopy、その後右クリックのPasteを選択します。
勿論、Command/CtrC キーでコピー、Command/CtrlVでペーストも行えます。

Project ビュー
Project ビュー

オブジェクトの座標は Transform の Position の X軸と Z軸を変更します。Y軸は壁と同じく 0 に設定します。
さっそく Block1 を配置していきましょう。

Project ビュー
Project ビュー

Unity 画面レイアウト
Unity 画面レイアウト


ボールが破棄されるルールの追加

ブロック崩しではラケットより下のブロックに接触するとボールが破棄されるルールが一般的です。
今回はそれに習い、下のバーに接触時した時に球が消滅する処理を追加します。

まずプロジェクトパネル上でCreateJavascriptと選択します。新しいスクリプトがプロジェクトに追加されますので、名前を BottomWallController とします。

次に生成されたスクリプトに以下の記述を追加します。

function OnCollisionEnter(collision: Collision) {
	Destroy(collision.gameObject);
}

こちらも BlockContoller と同じく OnCollisionEnter を使用します。
2行目で削除している対象が collision.gameObject、つまり接触しているオブジェクトを削除しています。

最後に作成した「BottomWallController」スクリプトをラケットの下の壁にドラッグアンドドロップしましょう。これでボールがラケット下の壁にボールが接触した時、ボールが破棄されるルールが追加されました。

Unity 画面レイアウト
Unity 画面レイアウト

Unity 画面レイアウト
Unity 画面レイアウト


まとめと次回のテーマ

さて、今回は基本的なゲームのルールを追加しました。
こうなると「ボールが一定時間でスピードアップ」や「2回・3回叩かないと壊れないブロック」等を作りたくなりますね。
それは宿題としましょう。

次回は音や演出等、ゲームを華やかにする要素を説明します。


今回のプロジェクトファイルをダウンロード