ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

Unity / Prefabについて

f:id:covory10101101276:20180215200146j:plain

濃溝の滝

 

みなさんこんにちは🌚

Vtuberの動画を見て技術力の高さに脱帽しているブルーノです。動きをリアルタイムで読み取ってモデルに反映するなんてすごいですよね。これを一般化すれば本当にバーチャルソーシャルネットワークで第二の世界が出来上がるかもしれませんね.....

さて今回は前回に引き続きゲームオブジェクトに連なるもう一つの概念であるPrefabについて勉強していきたいと思います。

 

その前に

プレファブの勉強の前に、階層構造(ヒエラルキーについて勉強しないといけません。

ヒエラルキーは、C#プログラミングの時に一度勉強しましたね。様々な機能を内包する場合にそれを階層構造、ヒエラルキーにして一つのクラスとしてまとめていました。

Unityでもこれを使うことになります。例えば、上の蓋だけない箱の形状などはスタンダードアセットにはありません。そんな単純な形はアセットストアにもないでしょう。というかちょっとした形を事あるごとにダウンロードしなくてはいけないならば、アセットの数はキリがありません。その場合は基本の形のオブジェクトを組み合わせるのですが、箱の形を作った後にそれを動かしたい場合全部のパーツを一つずつ動かしたりしていたら日が暮れてしまいますよね。そこでそれらを階層構造にする事で一つのオブジェクトとして動かしたり編集したりすることができるのです。

またちょっと見ていきましょう

箱を作ります。まず、ヒエラルキーの空いた欄で右クリックか「GameObject」から「Create Empty」を選択します。

f:id:covory10101101276:20180215204621p:plain

このゲームオブジェクトはその名の通り空っぽで、位置情報しか持っていません。こんなものが何に使えるのかと思いますが、これの中にパーツを作っていくことで階層構造を築きます。名前を「Box」にしておきましょう

とりあえずCubeを作ります。

f:id:covory10101101276:20180215205051p:plain

前回のPlaneとcubeはどけておきました。ちょっと壁っぽくしておきます。これをもう3つ作って囲えば、Planeの上に乗せて簡易的な箱の出来上がりです。

f:id:covory10101101276:20180215205746p:plain

こんなもんでどうでしょう。Cubeを選択して右クリックなどでコピーすればオブジェクトを同じ情報で複製できます。これらを選択してBoxにドラッグ&ドロップすると...

f:id:covory10101101276:20180215210128p:plain

動かせる!!

って画像じゃ分かりにくいですね笑 じゃあ先ほどのPlaneとCubeを持ってきましょう

f:id:covory10101101276:20180215211058p:plain

PlaneもBoxに入れちゃいました。これでPrefabの準備はできました!!

 

Prefabとは

さてついに今回のメインについて勉強していきます。

プレハブ...四角い家を想像しますね。実はそのプレハブと同じ意味です。あとでそれも説明します

さて、今プロジェクト内には落ちる立方体とそれを受ける箱がありますね。ちょっと見にくいのでCubeの体積を3倍にしました

f:id:covory10101101276:20180215213447p:plain

このキューブには前回RigidBodyを追加しました。そして今大きさも変えました。つまり元々用意されている物とは違います。ではこれを10個作って箱の中に落とし込むシミュレーションをするとします。このキューブを全部先ほどと同じようにコピーアンドペーストで用意しても良いですが、これを複製した後に変更したいとした場合、例えばBouncinessや色を変えたい時など、一つずつ変更していくのは効率が悪いですね。ではどうするか、そこで登場するのがPrefabという概念になります。Prefabの作り方をまず説明します

まずこのCubeをプロジェクトブラウザのAssets以下にドラッグ&ドロップします

f:id:covory10101101276:20180215214222p:plain

前回のPhysic Materialと同じ場所にヒエラルキーのキューブの情報が保存されました!これがPrefabです。ヒエラルキーのCubeも色が変わりました。これで今このゲームオブジェクトはプレファブを使っているということを表します。

では今度はこのプレファブをヒエラルキーかシーンブラウザにドラッグ&ドロップしましょう。すると...

f:id:covory10101101276:20180215214715p:plain

同じ情報のキューブが増えた!!

位置情報も同じなのでずらしときました。なんて便利なんでしょう。これだけではコピー&ペーストと同じですよね。ではこれを10個に増やします。

f:id:covory10101101276:20180215215223p:plain

この絶対自然界に存在しないであろう無機物感最高ですね。そして次にこのPrefabのMesh FilterをSphereに変えると

f:id:covory10101101276:20180215215524p:plain

f:id:covory10101101276:20180215215629p:plain

全部球になった!

これは便利!でもこれだけじゃありません!次に一つだけ形をCylinderにしてみましょう

f:id:covory10101101276:20180215220547p:plain

この状態でPrefabのMesh FilterをCapsuleに変えるとどうなるでしょうか

f:id:covory10101101276:20180215220726p:plain

他の物のみがカプセル状になりました!このようにヒエラルキー上で一度変更された情報はPrefabを編集しても変更されないのです。

ではCylinderにしたオブジェクトの情報を見てみましょう

f:id:covory10101101276:20180215221031p:plain

Inspecterの部分だけ普通のオブジェクトと違いますね。これはPrefabから生成された場合のみ表示されます。Prefabの欄の

Selectを押すとPrefabの情報に移ります。親を編集したい場合はここから選べるということですね。

Revertを押すと親と同じ情報になります。つまりさっきCylinderに変更したこのオブジェクトの形も元のSphereに戻るということです。

Applyはこのオブジェクトの情報に親の情報を書き換えます。つまりこの状況では全部のオブジェクトがCylinderになります。

このようにPrefabを使うと複数のオブジェクトの管理・複製がとても楽になるのですね!今回はここまでにしておきます。

 

卵って1ケース10個とか12個とか多いほど値段がとっても安くなりますよね。でもここでお得だーと思って買っても消費期限が短くて結局消費しきれないことが度々あるんです。その気になれば消費できるんですが値段的に4個入りとかより高い物を同じペースで買うんじゃ結局お得ではないですよね。一人暮らしには1週間で12個消費は難しい😪