MRが楽しい

MRやVRについて学習したことを書き残す

Unityで親オブジェクトや子オブジェクトのスクリプトの参照を取得する

本日は Unity の小ネタ枠です。
Unity で親オブジェクトや子オブジェクトのスクリプトの参照を取得する方法を記事にします。

親オブジェクトや子オブジェクトのスクリプトの参照を取得する

親オブジェクトのスクリプトの参照を取得する場合は GetComponentInParent、子オブジェクトのスクリプトの参照を取得する場合は GetComponentInChildren が利用できます。
・GetComponentInParent
docs.unity3d.com
・GetComponentInChildren
docs.unity3d.com

該当する全てのスクリプトの参照をリストで取得したい場合はそれぞれ複数形の関数を利用します。
・GetComponentsInParent
docs.unity3d.com
・GetComponentsInChildren
docs.unity3d.com

参照の優先度

GetComponentInParent または GetComponentInChildren での参照の動作と優先度を確認するため、以下のサンプルコードを作成しました。

以下のように各オブジェクトに CheckObject.cs を設定します。
f:id:bluebirdofoz:20220219233055j:plain

中央の ThisObject にのみ GetParentTest.cs を設定して動作確認を実施してみました。
f:id:bluebirdofoz:20220219233106j:plain

GetComponentInParentによる親オブジェクトの参照

有効なコンポーネントを検出するまで上方へ再帰呼び出しを行います。
親オブジェクトを辿るように捜索が行われるため、以下の通り実行オブジェクトから最も近い親オブジェクトの参照が返ります。
f:id:bluebirdofoz:20220219233115j:plain

GetComponentInChildrenによる子オブジェクトの参照

有効なコンポーネントを検出するまで深さ優先探索を行います。
子オブジェクトを辿るように捜索が行われるため、こちらも以下の通り実行オブジェクトから最も近い親オブジェクトの参照が返ります。
f:id:bluebirdofoz:20220219233123j:plain

捜索開始オブジェクトに該当スクリプトがある場合

捜索開始オブジェクトに該当スクリプトがある場合はどちらも同オブジェクトの参照が返ります。
f:id:bluebirdofoz:20220219233131j:plain

GetComponentInChildrenによる深さ優先探索の動き

同じ階層の子オブジェクトは Hierarchy 上で上方に配置されているオブジェクトから参照が返ります。
f:id:bluebirdofoz:20220219233140j:plain
f:id:bluebirdofoz:20220219233149j:plain

また深さ優先探索のため、より深い階層のオブジェクトであっても Hierarchy 上で上方に位置するオブジェクトが先に検出されます。
以下は ChildObject02 と ChildObject03 にのみ CheckObject.cs を設定したケースです。
f:id:bluebirdofoz:20220219233157j:plain