3Dテトリス用ブロックを作る ScriptableObjectでブロックデータを管理しよう

Unity C# 落ち物ゲームの作り方


Unityの本格ゲーム制作講座はこちら
【30日間の全額返金保証付き】

前回の記事では3Dテトリス用のフィールドと1マス分のブロックの生成までを実現し、好きな形でブロックフィールドを生成する基礎システムを作りました。

前回の記事:

3Dテトリスのフィールドと1マス分のブロックを作る
今回から6記事構成で3次元テトリスの方を実装していきます。 解説はやや簡易的。ソースコードをコピペしながら開発手順をなぞるだけであなたも3Dテトリスが作れるようになる講座です。 できあがるゲームはUnityroomに投稿したこちらのゲー...

今回の記事では本格的なテトリスブロックを作成していきます。


【Unity入門の森の最新ゲーム開発講座もお届け】

落ちてくるテトリスブロックのコンポーネント作成

まず、落ちてくるブロックを表すコンポーネントを作成していきます。

新しく「Block.cs」というスクリプトを作成してください。保存先はお好みでOKですが、記事ではAssetsフォルダーに保存しています。

「Block.cs」の内容は次のようにしてください。

「Block」コンポーネントは落ちてくるブロックを管理するものになります。

落下時の位置や回転処理などを行うメンバを定義していきます。

移動や回転処理などは今後の記事で実装していきます。

ブロックのバリエーションの作成 Scriptable Objectでデータを管理

次にブロックのバリエーションを作成できるようにしていきます。

「Block」コンポーネントには「BlockTemplate」フィールドというブロックの種類を表すメンバを用意しています。

実際に再生するときは「BlockTemplate」フィールドに設定されたものから「Instance」フィールドの内容を作成し、「Instance」フィールドがブロックの形を表します。

BlockTemplateクラスの作成

それではまず。「BlockTemplate」クラスを作成していきます。

新しく「BlockTemplate.cs」というスクリプトを作成してください。保存先はお好みでOKですが、記事ではAssetsフォルダーに保存しています。

「BlockTemplate.cs」の内容は以下のようにしてください。

「BlockTemplate」クラスはScriptableObjectとして定義しています。

なので、ゲームに登場させたいブロック分「BlockTemplate」クラスのアセットを作成する必要があります。

アセットの作成は「BlockInstance」クラスを作成してから行いますので、先に必要なスクリプトを作成していきます。

BlockInstanceクラスの作成

次に再生中のブロックを表す「BlockInstance」クラスを作成していきます。

新しく「BlockInstance.cs」というスクリプトを作成してください。保存先はお好みでOKですが、記事ではAssetsフォルダーに保存しています。

「BlockInstance.cs」の内容は以下のようにしてください。

「BlockInstance」クラスは再生中に「BlockTemplate」クラスから作成されるものになります。

作成された「BlockInstance」は「Block」コンポーネントの「Instance」フィールドに設定されます。

「Block」コンポーネントは「Instance」フィールドの内容からブロックの形状や回転状況を判断します。

テトリス用ブロックアセットの作成

ここまででスクリプトの準備ができましたので、次はブロックに必要なアセットを作成していきます。

ブロックのプレハブの作成

次にブロックのプレハブを作成します。

次の手順を行ってください。

  • メニューのGameObject > 空のGameObjectをクリックしてください。

作成したGameObjectはプレハブ化し、名前を「Block」に設定してください。プレハブの保存先はお好みの場所でOKですが、記事ではAssetsフォルダーに保存しています。

プレハブを作成した後はシーンにあるGameObjectの方は削除してください。

「Block」プレハブの設定内容は次のものにしてください。

デフォルトでは画面に何も表示されませんが、後々確認用の処理を追加します。

ブロックのテンプレートをScriptable Objectから作成

次に「BlockTemplate」クラスのアセットを次の設定内容から複数作成してください。

アセットの名前も指定してますが、わかりやすいものに変更してもOKですのでその辺りはお好みで決めてください。

また、保存先のフォルダーはお好みでOKです。記事では Assets > Blocksフォルダーに保存しています。

これらのアセットは「Block」プレハブの「BlockTemplate」フィールドに設定して使用することを想定しています。

実際にはスクリプトからこれらの「BlockTemplate」アセットを設定するようにするので「Block」プレハブに設定しておく必要はありません。

ただし確認用として「Block」コンポーネントに次のメンバを追加すると簡単にブロックの形がわかるので追加するといいでしょう。

上の設定で作成した「BlockTemplate」の見た目は次のものになります。

まとめ

今回の記事ではブロックを作成しました。

複数のクラスでブロックを表すようにしていますが、次のような役割分担となっていますので参考にしてください。

  • Blockコンポーネント:グリッド内のブロックの位置などを管理するためのクラス。
  • BlockTemplate : ブロックをアセットとして管理するためのクラス
  • BlockInstance : ブロックを表すための基本となるクラス。

まとめますと以下のようになります。

  • ブロックを表すコンポーネントの作成
  • ブロックの種類を表すScriptableObjectの作成
  • ブロックの基本情報を表すクラスの作成
  • ゲーム中に出てくるブロックのアセットを作成

それでは次の記事に行ってみましょう!

次の記事:

テトリスブロックの落下処理と揃ったら消える処理の作り方
前回の記事で個々のテトリスブロックの形を変えて生成できるようになりました。 前回の記事: 今回の記事では実際にブロックをグリッド内に落下させるようにしていきます。 さらに、落下したブロックが一面に揃ったら消えるようにします。 ブ...

【Unity入門の森の最新ゲーム開発講座もお届け】

コメント

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