[Unity]親子関係

  • SumoMe

Unityのみならず、一般的なコンピュータ・グラフィックスの重要な概念です。Unityにおける親子関係の簡単な説明をします。

親子設定

親子関係を設定するには

  1. 子にするオブジェクトをドラッグ
  2. 親にするオブジェクトにドロップ

とします。(下の図参照)

related

親子関係の特徴

親子関係を設定することによって、以下の特徴が生じます。

  1. 子は親の移動・回転・拡大縮小の影響を受ける
  2. 親は子の影響を受けない

この特徴を利用すると、胴体オブジェクト(親)と腕オブジェクト(子)を作り、胴を移動させると、腕も移動し、腕を振る(回転させる)と腕だけが動きます。これを親子関係を利用せずに同じことを行おうとすると、数ステップの処理が必要になり管理が非常に複雑になってしまいます。

グループ化と捉えても良いかもしれません。

親子の座標に対する扱い

親に移動・回転・拡大縮小の操作をしても、子のそれらのパラメータは変更されません。なぜならば、子は親との相対関係を保持しているのです。

relate-position

上の図では、2つのオブジェクトの位置を表しています。親子関係を施すと、子は親の相対的な位置を保持しているのがわかると思います。子のXの座標が3から2となり、親との距離となります。親子関係を解消すると元の座標に戻ります。

惑星系を作ってみる

球のオブジェクトを3つ用意して、名前を変更し、以下の図のように変更します。

  • Sun
  • Earth
  • Moon

planetPreview

これらのオブジェクトを以下のようにHierarchyで親子関係をつけます。

planetH

このように関係付けすると

  • Sunを回転させると、EarthとMoonが回転する
  • Earthを回転すると、Moonが回転する

となり、簡単な惑星系を表現することができます。ですが、これではSunの自転がEarthの公転になってしまい、Earthの自転がMoonの公転となってしまします。そこで、自転(=球の回転)と公転を分離するために、GameObjectを2つ作成し、以下の名前に変更します。

  • SunPivot:Sunと同じ位置へ変更
  • EarthPivot:Earthと同じ位置へ変更

このPivotを公転の回転軸にします。これらすべてを以下のようにHierarchyで配置することで、自転と公転を別々に管理することができるようになります。

planetPivodH

公転をさせる場合はPivotを回転させ、自転させる場合は自転させるオブジェクト(Sun,Earth,Moon)を回転させることで実現できます。

おわりに

今回は親子関係を簡単に扱いました。スクリプトでもこの親子関係が非常に重要になりますので、Hierarchyできっちり親子関係になれておきましょう。