猫でもわかるUnity入門(第19回 オブジェクトを再利用しよう)

f:id:enia:20210228230354p:plain えにあです。

以前に、オブジェクトの設計図である「プレハブ」を利用しました。 今回はプレハブを継承して、機能を追加した新たなプレハブを作成する方法を学んだので記載していきます。

目次

実現したいこと

以下のように、白と茶色の碁盤のようなものを作成しようとしています。
f:id:enia:20210308152646p:plain  

後々、色を変えたくなるかもしれません。 そのため、白い床と、茶色い床はそれぞれプレハブとして作成したいです。

しかし、白い床と茶色い床には、「床」としての共通機能があります。 例えば、クリックした時に何かしらの処理をする、といった動作です。これを実現しようと思うと、オブジェクト指向における「クラス継承」のような機能が必要です。

「床プレハブ」を継承した「白床プレハブ」と「茶色床プレハブ」を作成することができれば、共通の機能を変更したい場合は「床プレハブ」に変更を加え、茶色を黒に変えたければ「茶色床プレハブ」だけに変更を加えれば良いのです。

この「プレハブの継承」に相当する機能を調べたので記載していきます。

床プレハブの作成

結論から述べますと「プレハブバリアント」という機能を使ってやりたいことを実現することができます。 上述の床の例で試していきます。

まず、厚みのある床を作るためにキューブを作成します。 f:id:enia:20210308155048p:plain

名前をBoardにしてリセットしておきます。 拡大/縮小のY軸を0.1にし、板の厚みを薄くしておきます。 f:id:enia:20210308155326p:plain

ヒエラルキービューからborardをドラッグして、プロジェクトビューにドロップします。 f:id:enia:20210308160554g:plain

これで、「白床プレハブ」と「茶色床プレハブ」の元となるプレハブは完成です。

マテリアルの作成

色床プレハブと茶色床プレハブを作るためには、マテリアルが必要になるので作っておきます。 マテリアル作成は以前もやっていますね。

トップメニューから「アセット」->「作成」->「マテリアル」で作成します。 f:id:enia:20210308161232p:plain

名前をBrownにして、インスペクターから「アルベド」で茶色に変更します。
細かい色はこの記事の本質ではないので、茶色っぽければ何でもよいです。
f:id:enia:20210308161544p:plain

NOTE:
マテリアルの名前の変更方法を忘れてしまいましたか?
マテリアルの名前の変更はインスペクターでは行えません。
プレジェクトビューでマテリアルを選択し、F2を押せば変更できます。

同様の手で「White」という名前で白のマテリアルも作っておきましょう。
ここまでで、Boardプレハブと、Brownマテリアル、Whiteマテリアルの3つが存在する状態になっています。
f:id:enia:20210308162022p:plain

色付きプレハブの作成

今回の本題である、床プレハブを継承した「白床プレハブ」と「茶色床プレハブ」を作っていきます。 まず、ヒエラルキービューにあるBoardプレハブのインスタンスに「茶色マテリアル」をアタッチします。

※もし、床プレハブ作成手順のあとでBoardインスタンスを消してしまった場合は、プロジェクトビューからBoardプレハブをドラッグし、ヒエラルキービューにドロップすればBoardインスタンスを作成できます。 f:id:enia:20210308162717g:plain

ヒエラルキービューで茶色マテリアルをアタッチしたBorardインスタンスを選択し、プロジェクトビューにドラッグアンドドロップします。最初にオブジェクトを作成してプレハブを作ったのと同じように、床プレハブのインスタンスからプレハブを作るということです。

すると、以下のポップアップが表示されるので、プレハブバリアントを選択します。 f:id:enia:20210308163540p:plain

作成されたプレハブをBrownBoardとしておきます。
f:id:enia:20210308163741p:plain

これで、「床プレハブ」を継承した「茶色床プレハブ」ができました。
プレハブの継承手順としてはこの時点で完了しているのですが、このまま碁盤を作っていきます。

同様の手順で「白床プレハブ」を作ります。 ヒエラルキービューに残っている「Board」はいったん削除しましょう。 プロジェクトビューから「床プレハブ」をドラッグし、ヒエラルキービューにドロップして「床インスタンス」を作ります。

Boardという名前でも、色はデフォルトの床の色に戻ってるはずです。
f:id:enia:20210308164150p:plain

プロジェクトビューで「白マテリアル」を選択しBoardにアタッチします。 白マテリアルをアタッチしたBoardをプロジェクトビューに戻し、「白床プレハブ」を作成します。 原型プレハブではなく「プレハブバリアント」を選択するのを忘れずに。 作成したプレハブの名前は「WhiteBoard」に変えておきましょう。

碁盤の作成

あとはWhiteプレハブとBrownプレハブを交互に並べていくだけです。 f:id:enia:20210308164846p:plain

床全体に共通のタグをつけてみます。
その場合は床プレハブを修正すればよいですね。
試しに、床プレハブのタグをPlayerに変更してみます。
f:id:enia:20210308165038p:plain

BrownBoardも、WhteBoardもタグが変わっているのが分かると思います。 f:id:enia:20210308165138p:plain f:id:enia:20210308165229p:plain

次に、BrownBoardに色を黄色に変えてみます。 Yellowマテリアルを作ってBrownBoardにアタッチしてみます。 f:id:enia:20210308165441p:plain

BrownBoard1もBrownBoard2も一度に色が変わるのが分かると思います。 f:id:enia:20210308165506p:plain

NOTE:
プレハブの名前をBrownBoardという名前にしてしまいましたが、それだと色を変えた時に名前と実体が不整合になってしまいます。「色」のような変更される特徴ではなく「機能や役割」で名前を付けるべきでした。 この例だと特に「機能や役割」がないのでBoardA/BoardBでも良いですし、奇数/偶数という意味でOddBoard/EvenBoardのようなつけ方でも良かったかもしれません。

プレハブを継承して機能を追加した新たなプレハブを作成する方法について記載しました。 今回はここまで!