今回はプレハブのちょっと発展した使い方を解説したいと思います。↑の動画でも解説していますので、ぜひご活用ください。動画はUnity2018.3以降のバージョンについて解説しています。, この記事は本のように順を追って解説しています。この記事は途中のページになります。この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。, プレハブは実は子オブジェクトを含めることができます。親オブジェクトをプレハブ化すると、子オブジェクトも含まれた状態でプレハブ化します。, ↑のように、子オブジェクトが青色の文字になってプレハブに含まれている事がわかります。, Unity2018.3以降のバージョンの場合、子オブジェクトが含まれているプレハブに新たにゲームオブジェクトをドラッグ&ドロップすると, 一見、プレハブにしてしまったゲームオブジェクトには新たに子オブジェクトを追加できないように思えますが・・・, 非常にわかりづらいのですが、青色になっているオブジェクト同士の間に新たに子オブジェクトを追加することができません。, エラーでの警告文は今追加しようとしている子オブジェクトに対してではなく、既に存在している子オブジェクトの位置がズレてしまうのでプレハブモードで編集しろと言われているわけです。, プレハブに子オブジェクトを追加するとプラスマークがついて、そのゲームオブジェクト独自の変更として扱われます。, Unity2018.3以降のバージョンの場合、プレハブから作ったゲームオブジェクトに独自の変更を加えるとoverridesからのApply Allで全ての変更をプレハブに適用することができますが、実は変更1個1個を個別に適用することもできます。, 変更が存在する状態でコンポーネントの右側の歯車のようなマークをクリックすると↓のようになります。, このAdded Componentの項目で、どのプレハブに適用するのか選ぶことができます。変更を破棄することもできます。, この項目で選んだ場合、歯車マークを押したコンポーネント単体の変更だけが適用されます。, コンポーネントのパラメーターを変更した場合は、コンポーネントの右上の三点からModified Component >Apply to Prefabで, コンポーネントの時のようにどのプレハブに適用するのかというのは子オブジェクトも選ぶ事ができます。追加した子オブジェクトで右クリックして、Added GameObject, すると、このようにどのプレハブに適用するのかを選ぶ事ができます。これは現在選択している子オブジェクトのみに適用されます。, また、プレハブの中に子オブジェクトを入れて適用すると、プレハブ画面でしかいじれないようになります。, プレハブモードではない状態でヒエラルキーから子オブジェクトを削除したり、親子関係を解除しようとしたりすると、, このようなダイアログが表示されて、子オブジェクトを動かせないようになります。Unity2018.3以降のバージョンではプレハブ内の親子関係をいじる際は、新しい子オブジェクトを追加する以外の行動は取れないので、プレハブモードで修正する必要があります。, プレハブモードの細かい使い方については↓の記事にまとめてみたので、興味のある方はのぞいてみて下さい。, Unity2018.3より前かそれ以降かで扱いが違うので注意してください。Unity2018.3より前のバージョンの使い方はコチラへ飛んでください, Unity2018.3以降のバージョンの場合、プレハブの中にプレハブを入れることができます。この機能の事をNested Prefabsと言います。, とりあえずやってみましょう。前回用意した適当に作ったプレハブをとりあえずシーン上に置いてみます。, ちょっと、これではわかりづらいので、もう一個適当にオブジェクトを作って、今度はプレハブにはせずにSphereの子オブジェクトにしてみましょう。, Capsuleというオブジェクトを作成して、Sphereの子オブジェクトにしてみました。すると、Cubeのアイコンは青色なのに、Capsuleは白色です。, プレハブを元にして作られたゲームオブジェクトは青色の箱で見分けがつくようになっています。Cubeはプレハブですが、Capsuleはプレハブではないということですね。, このように、「プレハブを元にして作られたゲームオブジェクト」の中に「プレハブを元にして作られたゲームオブジェクト」を入れても、プレハブとの関係が維持されているのがわかります。, 青字になってSphereのプレハブに含まれている事がわかるし、横の箱の色で、その子オブジェクト自体にもプレハブがあるのかどうかがわかります。, この状態でCubeのプレハブをいじるとどうなるのでしょうか。ちょっとやってみましょう。, さて、元のCubeのプレハブに対して変更を行ったところ、Sphereの中のプレハブには変更が反映されていない事がわかります。ただしこれは、Unityのバージョンによって挙動が変わる?みたいなので気を付けてください, プレハブの中にプレハブを入れた場合、そのプレハブは独自のパラメータを持っている物として扱われます。, 独自のパラメータを持っているとして扱われている場合、プレハブの元ファイルを変更してもそのパラメータは適用されません。これは前回解説しています。, ちょっとややこしいですが、ヒエラルキー上でSphereの中のCubeを選択しても太字の場所はどこにもなく、独自のパラメータを持っているようには見えません。, ここでSphereの「>」をクリックして、Sphereのプレハブの画面に飛ぶと、↓のようにプレハブ用の画面ではパラメータに変更がされている事がわかります。, これは、ヒエラルキーにいるSphereの中のCubeはShpereのプレハブとパラメータが一致しているので変更はないものとして扱われます。, プレハブ画面のSphereの中のCubeは元のCubeのプレハブとパラメータが違うため、独自のパラメータを持っているものとして扱われるわけです。, Cubeを選択した状態でRevert Allを押せば、Cubeの独自変更がなかったことになるので、, なんか大きさが違うのは親オブジェクトであるShpereのScaleが大きいからです。, 逆にApply Allを押すことによって、入れ子にしたプレハブの変更を元のプレハブに適用することもできます。, プレハブの中にプレハブを入れられることはわかりましたが、プレハブAの中にプレハブBを入れてApplyし、その後、プレハブBの中にプレハブAを入れてApplyするとどうなるでしょう。, Cubeの中にSphereを入れてその中にCubeが入っている状態にしてみました。, Cubeの中にCubeが入っているので、上のCubeを更新すると下のCubeにも反映されて無限ループ状態になってしまいますね。, コンソールにエラーが表示されました。このようにプレハブがループする形にはできないということですね。プレハブ画面で同じようなことをすると, Unity2018.3より前のバージョンの場合、このプレハブの中にプレハブを入れてしまうと、入れた方のプレハブは入れられたプレハブの物になってしまうという習性があります。, とりあえず、前回適当に作ったプレハブをシーン上に置いてみました。同じものを3つ並べてみましょうか。, そして、SphereのApplyを押せば、SphereのプレハブはCubeのプレハブを含むことになるのですが、Unity2018.3より前の場合は、CubeはSphereに吸収されてしまいます。, ↓のように新しいプレハブに吸収されてしまった場合、元のプレハブを操作しても変更が反映されません。, プレハブを用意したものの、そこからたくさん派生したい時というものもあると思います。, 例えば、色違いの敵など、1つのものを基準としてそれとはちょっと違うプレハブを何種類も用意したい時はよくあります。, このように、1つのプレハブを基準に様々な派生として作られたプレハブをプレハブバリアントと言います。, プロジェクトウィンドウでプレハブを選択した状態で右クリック>Create>Prefab Variant, すると↓のような派生系のプレハブを作成する事ができます。作成されたプレハブは初期の状態だと元のプレハブと同じ状態になっています。, この操作はヒエラルキーにあるプレハブからプロジェクトウィンドウにドラッグ&ドロップしても同じ事ができます。, ・Prefab Variant・・・派生系のプレハブにするのか・Cancel・・・キャンセルするか・Original Prefab・・・全く別のただのプレハブを作成するのか, というダイアログが表示されます。ここでPrefab Variantを選択すれば同じ事ができます。, このプレハブヴァリアントの機能を使用すると、派生元のプレハブを弄ると派生先のプレハブにも変更が適用されますが、派生先のプレハブをいじっても派生元には変更が反映されません。, この機能のおかげで、元々のプレハブを変更さえすれば、派生先にいちいち変更を適用する作業をしなくても大丈夫です。便利なので覚えておくといいと思いますよ。, ちなみに、派生先のプレハブの変更を元のプレハブに適用したいときは、プレハブ画面で一番上の親オブジェクトを選択し、Overrides>Apply All to BaseとすればOKです。, ・プレハブは親子関係を含める事ができるよ!・親子関係を持ったプレハブの変更は新たに子オブジェクトを含めることはできるけど、移動、削除はプレハブモードじゃないとできないよ!・プレハブからの独自変更は個別に適応できるよ!・プレハブの中にプレハブを入れる事ができるよ! ・プレハブは派生系を作る事ができるよ!, さて、Unityについて色々学んで来ましたが、次回はUnityを使用する際の注意点について解説したいと思いますので、よろしくお願い致します。, プレハブの親子関係とNestedとVariant【Unity初心者入門講座】【ゲームの作り方】#29, Unity初心者入門講座としてエディタの使い方を解説しています。インストールから基本、プログラミング、チュートリアルとして2Dアクションゲームの作り方を解説しています。また、動画での解説も行っているので未経験の人でもわかりやすいかなと思います。, プレハブを編集する画面、プレハブモードについて解説しています。Unity2018.3から導入された機能です。プレハブの状態を変更する際に使用されます。Nested PrefabとVariant Prefabでの扱いには注意してください。, Unity初心者の方でもわかりやすいようにUnityを使用する際の注意点について解説しています。開発を始める前に知っておきたい事があるので、まずは確認しましょう。特にシーン再生時のSerialize化された変数など注意が必要です。. ョンのために, Transform の軸の色(および、その他の UI エレメント)を Preferencees (, スケールを変更すると、子の Transform の位置も変更されます。例えば親の位置が (0, 0, 0) の場合はすべての子は親の (0, 0, 0) から相対的な位置になります。. Unityだとこんな感じです親子関係の例上図でいう「IKTarget」が親で、その中にある「LeftIK/RightIK」が子の親子関係です。また「LeftIK」と「RightIK」が親子関係のない状態です。 今回は複数のオブジェクトを動的に親子関係する検証をしていたのでそのまとめになります。 Unityには「親子関係」というものがあります。 これ(AI)が親! これら(Cubeとmagic_ring_05)が子供! この親オブジェクトについたスクリプトから、複数の子オブジェクト及び特定の子オブジェクトを … 初心者の方でも入りやすいように、Unityのオブジェクトの親子関係について解説しています。ローカル座標、ワールド座標などのポイントを抑えておきましょう。シーンビューでの操作にはグローバル … 思ったほど情報量がなくてなんともアレですね.... とはいえこれだけわかってればやりたいことでできることがちょっと増えるので開発に取り入れていこうかなと思います。 親を右に動かしたら子も一緒に右に動きます。回転させれば同じように回転します。ただそれだけです。, Transform.parentというものが用意されているのでこいつを使っていきます オブジェクトの下にオブジェクトを入れることで、グルーピングが出来て、しかも深い階層構造もできる その際、 ・Pivotは単体の中心位置 ・Centerは親子 … 親子関係の移動、Prefab ... のですが、ボーンがHeadについているため、一旦blenderでウエイトペイントで値を変更し、unityへ持っていきskeletonの親子関係、headについてる尻尾のhairjointをSpineにD&Dしたいのですが下記のエラーメッセージが出てしまいます。 この記事は本のように順を追って解説しています。この記事は途中のページになります。この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。, さて、Unityの基本的な操作方法がわかったところで、親子関係を作ってみましょう。, いきなり親子関係とか言われてもよくわからないと思います。ですが、説明するよりやってみる方が早いのでとりあえずやってみましょう。画面にCubeを置いた状態にしてください。, 今度は別のオブジェクトを置いてみましょう。ヒエラルキー上で右クリック>3DObject>Sphereをクリックで以下のようにします。, 次にヒエラルキー上でSphereをドラッグ&ドロップしてCubeに重ねてください。, この場合Cubeが親でSphereが子ですね。さらに重ねて孫、ひ孫と数を増やしていくこともできます。子、孫、ひ孫も全てひっくるめて子オブジェクトと呼ばれます。各階層に1つだけでなくたくさん追加する事もできます。, ↓の映像ではCubeしか動かしていませんが、Sphereも追従して動いている事がわかると思います。, 親子関係にあるオブジェクトを操作しやすいようにトランスフォームツールの右側にある2つのボタンを覚えておくと便利かもしれません。, 左側のボタンは押すとPivot←→Centerと変わります(ショートカットキーは「Z」です)右側のボタンは押すとGlobal←→Localと変わります(ショートカットキーは「X」です), ・Pivot・・・そのゲームオブジェクト単体の中心位置・Center・・・自身と全ての子オブジェクト(孫以下全て含む)の中心位置, ちなみに今回の場合Sphereには子がいないのでSphereを選択した状態でPivot,Centerを切り替えても位置は変わりません。自身の親は考慮しないようです。, ・Global・・・現在の回転を0とした場合の向き・Local・・・ゲームオブジェクトの回転を考慮した場合の向き, Globalを選択した状態でゲームオブジェクトを回転させると矢印の向きも変わるのですが、他のオブジェクトを選択して戻ってきた時やGlobal→Local→Globalと切り替えた時も回転が0の状態に戻ります。, 選択が切り替わった時の回転を0として扱うものがGlobalととらえた方がいいかもしれません。, 今度は親子関係を一旦解除して、位置を仕切り直します。親子関係を解除するには子をドラッグ&ドロップで親の外に持っていってやると解除できます。, Cubeの座標は(10,0,0),Sphereの座標は(15,0,0)で現在親子関係ではありません。, Cubeのインスペクターは変わりませんが、Sphereの座標が(5,0,0)になったかと思います。, これはTransformのコンポーネントはインスペクタ上で親からの相対座標を表示しているからです。, Cubeが10でSphereが15の位置にいるので、Cubeの子になったSphereはCubeから見て5の位置に存在するという事です。15-10=5ですね。, この親から見た相対的な座標をローカル座標と呼びます。これはすごく重要なので覚えましょう。, 座標(20,0,0)に新たにゲームオブジェクトを作ってSphereの子にした場合、その子のローカル座標は(5,0,0)になります。(20,0,0)の位置はSphereからみたら(5,0,0)だからです。一番上の親からの相対座標ではなく一つ上の親の相対座標という事ですね。, ちなみに親子関係を解除するとSphereの座標は(15,0,0)に戻ります。元の座標が(15,0,0)だからですね。このように親の事を考慮しない元々の座標をグローバル座標もしくはワールド座標と言います。, ↑はTransformのPositionのみで解説しましたが、Rotation、Scaleも相対的な値になります。こちらもローカル、グローバル(ワールド)があるので覚えておきましょう。, ローテション = グローバルローカルローテーション = ローカルスケール = グローバルローカルスケール = ローカル, みたいに、座標と呼ばれ方が違うので気をつけた方がいいかもしれません。また単に「ポジション」といった場合それはグローバルをさします。, 「position」「localPosition」「rotation」「localRotation」「scale」「localScale」, と英語で表現された時、何もついてないやつはグローバルと覚えておくといいかもしれません。ただし、インスペクター上では何もついてないのにローカルで扱われるので注意が必要です。, ・インスペクター上ではローカル・インスペクター以外の場所ではlocalとつかないとグローバル・日本語だとローカル,グローバルとちゃんと区分けされて表現される, かなりこんがらがりますが、グローバルとローカルを見分けられないと全然思ったように動いてくれないので↑のややこしい方式は覚えなくてもいいですが、どっちなのか考えられるようにはしておきましょう。, さて、ここまで親子関係について解説してきました。親子関係を作ることにより、親を動かすだけで子も勝手に動くので操作がやりやすくとても便利な機能ですのでぜひ覚えておきましょう。, ・ヒエラルキー上でドラッグ&ドロップで親子関係を作れるよ!・ドラッグ&ドロップで親子関係を解除することもできるよ!・子は親に追従するよ!・インスペクターの表示はローカル座標になるよ!, Unity初心者入門講座としてエディタの使い方を解説しています。インストールから基本、プログラミング、チュートリアルとして2Dアクションゲームの作り方を解説しています。また、動画での解説も行っているので未経験の人でもわかりやすいかなと思います。, Unity初心者の方でもわかりやすいようにマテリアルについて解説しています。マテリアルは使用するシェーダーとそのパラメータを保持しています。これらを変更することによって物体の見え方を変えることができます。.