時雨に舞う

プログラミングや技術情報などの備忘録

unityの親子関係の基本

unityはシーン中の全てのインスタンスが GameObject を保持しています。

正確には各インスタンスMonoBehaviourを継承しているので、その基底クラスBehaviour、その基底クラスComponentのプロパティとして提供されています。

GameObjectにはtransformプロパティがあり、そのparentプロパティに親となる GameObjectのtransformを渡す事で親子関係が設定されます。

例えば

GameObject obj1 = new GameObject();

GameObject obj2 = new GameObject();

obj2.transform.parent = obj1.transform;

これでobj1がobj2の親と設定されたのです。

ポイントは、この親を設定したタイミングで子(今回はobj2)のローカル情報(移動、回転、拡大)は親(今回はobj1)のローカル情報に影響を受けて書き変わるとうい点です。

要するに親子関係になった事で親の行列が適用されるようになりますが、obj2が親子設定される前の結果になるように調整されるのですね。非常に便利ですがこの動きを知らないと案外ハマったりするものです。ただ代入しているように見えるが中では色々な処理が走るというプロパティの罠なのかもしれませんね。

 

著者:t.n