独習 Unity アプリ開発

独習でスマフォ向けアプリ開発を勉強中

Unity で テトリス風ゲームを作ってみる#2

Unityでゲームを作る

 Unity Version 2022.3.4

目次

前回の続き


おおよそ何をつくればよいのかが整理できたので、今回からざっくりどうやってUnityでどう作るのかを整理する。

 

テトリミノとブロック


テトリミノは7 種類あってそれぞれ4 個のブロックで構成されている。テトリミノは着地するとブロックとしてフィールドに置かれた状態になる。

ということで、最小単位を表すブロックを表現するキャラクタを作って、それを組み合わせて7 種類のテトリミノを作るのがよさそうだ。

 

Unity ではゲームのキャラクタを表現するのにGameObject というものが使われる(キャラクタだけでなく、画面上に配置されるものはUI部品も含めて全部GameObject)

GameObject は親子関係を持つことができて、例えば親のGameObject が右に移動すると、子のGameObject も一緒に右に移動する。この特性を使えば、テトリミノを親GameObject、ブロックを子GameObjectにすることで、テトリミノGameObjectを操作すれば、4個のブロックも同時に操作することが可能。

下図のようにブロックを表現する子GameObjectを作って、それをまとめる親GameObjectをテトリミノとして表現する。下図ではテトリミノGameObjectに枠線があるように書いてあるが、実際にはテトリミノGameObjectは透明とする(テクスチャを持っていない)。

ブロックとテトリミノ

テトリミノの7 種類の形は、子ブロックの配置場所によって表現する。つまりブロックの座標情報をテトリミノクラス内部に持たせる。

 

ブロックGameObject


ブロックの種類は8種類。テトリミノごとの色違いが7 種類、もう一つはフィールド枠を表現するブロック(後々、ブロック化した後に色を変えるのはやめたので7 種類)。

ブロックのテクスチャは、色を変えるだけで同じものを利用する方法を使うので一種類だけ作成しておけばOK。同じテクスチャで色だけ変更する必要があるので、用意する画像は白で描かれたものとするとよい。使用するテクスチャは以下の適当に描いたやつを使用。(下図だが、白なので見えずらい、、、)

ブロックテクスチャ



GameObject にテクスチャを使う場合は、SpriteRenderer というコンポーネントを追加することで実現可能。

Unity ではGameObject にさまざまなコンポーネントを追加することで機能を拡張することができる。コンポーネントにはSpriteRenderer 以外にも、例えばGameObject の位置・回転・スケールを管理するTransform、物理演算の対象となるRigidbody2D や衝突対象となるCollider2DスクリプトC#)を記述できるMonoBehaviourなどのコンポーネントがある。GameObject で何を表現したいかによって、必要なコンポーネントを使い分けることで簡単に実現できるようになっている。後々説明するが、キー操作でテトリミノを動かすといった制御をさせるために、MonoBehaviour を使って実現することになる。

 

それでは画面上にGameObject でブロックを作って、表示するところまで確認してみる。テクスチャファイルは、Assets フォルダに"Resources/Sprites" フォルダを作成して、その中に保存しておく。(PNG ファイル)

スプライトアセット

 

次にSceneのHierarchy 上を右クリックしてメニューから"2D Object" → "Sprites" → "Square" を選択して、GameObject を作成する。名前は"Block"に変更した。

 

SampleScene

すると、予めSpriteRenderer コンポーネントが付いたGameObject が生成される(Tranform コンポーネントはすべてのGameObject にデフォルトで付いている)。もちろん、空のGameObject を作成した後にSpriteRenderer コンポーネントを追加してもよい。

SpriteRenderer コンポーネントにある"Sprite"の項目に、準備したスプライトアセットを指定し、"Color"の項目に適当な色 (ここでは赤色)を指定する。ここで指定する色がテクスチャの各ピクセルの色と掛け合わせれて最終的な表示色となるので、これが元のテクスチャの色を白にしていた理由である(白じゃないと変な色になってしまう)。

GameObject

ゲームスクリーン (右側のWindow)にブロックが表示された。

GameObject ブロック

あとは、このブロックを4個作ってテトリミノの形に合わせて配置できればテトリミノの完成する。

Scene に空のGameObject を作って、名前を"Tetrimino"に変更。空のGameObjectは、Hierarchy 上を右クリックしてメニューから"Create Empty"という項目を選択すれば作れる。テトリミノ自体は、テクスチャを持っていないのでとりあえず空のGameObject でよい。 空といってもTransform は必ず付いている。

作成したTetrimino GameObject に Block GameObject をドラッグして子GameObject としてぶら下げる。あとはBlock GameObject をCtrl-Dでコピーして4 個にすればOK.

テトリミノ

Block GameObject をコピーしたままだと、同じ場所に重なった状態のままなので、それぞれの位置をTransform コンポーネントのPosition x, y で調整して、ちょうどよい感じに移動すると下記のように凸型のテトリミノが完成する。変更するのはBlock のTransformであって、TetriminoのTransformではないことに注意。 

スクリーン上のテトリミノ

次の記事


Unity で テトリス風ゲームを作ってみる#3

 

 


目次に戻る