Unity3D
Unity
Unity4
Unity2D

オブジェクトの親子関係のまとめ - Unity

More than 3 years have passed since last update.

オブジェクトの親子関係をスクリプトから操作する方法をまとめてみました。


オブジェクトを取得する


子オブジェクト → 親オブジェクト

子オブジェクトのスクリプトから親オブジェクトを取得します。

using UnityEngine;

using System.Collections;

public class ChildScript : MonoBehaviour {

private GameObject _parent;

void Start(){

//親オブジェクトを取得
_parent = transform.root.gameObject;

Debug.Log ("Parent:" + _parent.name);

}
}


親オブジェクト → 子オブジェクト

using UnityEngine;

using System.Collections;

public class ParentScript : MonoBehaviour {

private GameObject _child;

// Use this for initialization
void Start () {
_child = transform.FindChild ("Child").gameObject;

Debug.Log("Child is:" + _child.name);
}
}


親 → 子オブジェクト(複数)

using UnityEngine;

using System.Collections;

public class ParentChildrenScript : MonoBehaviour {

// Use this for initialization
void Start () {
int count = 0;
foreach (Transform child in transform)
{
//child is your child transform

Debug.Log ("Child[" + count + "]:" + child.name);
count++;
}

}
}


親子関係を構築・解除する


親オブジェクトを指定する

親オブジェクトを指定することで、親子関係になる方法です。

子オブジェクトのtransform.parentに親にしたいオブジェクトのtransformを代入します。

Child.transform.parent = Parent.transform;


実行前

WannaBeParentとWannaBeChildには親子関係がありません

unity2015-03-17_10_30_53.png

using UnityEngine;

using System.Collections;

public class WannaBeChild : MonoBehaviour {

void Start () {
transform.parent = GameObject.Find("WannaBeParent").transform;
}

}


実行後

親子関係になったことが確認できます。

unity2015-03-17_10_31_03.png


親オブジェクトを解除する

子オブジェクトから親オブジェクトを解除するにはtransform.parentをnullにすることで親子関係を解除します。

ChildObject.transform.parent = null;


子オブジェクトを一括で解除する

親オブジェクトから子オブジェクトの全てを解除する場合、DetachChildren()を使用すれば一括で解除できます。

RootObject.transform.DetachChildren();


子オブジェクトが存在するか判定する

子オブジェクトが存在するかどうかを判定するには、IsChildOf()を使用します。

例として、Parent1(子あり)とParentNoChild(子なし)のオブジェクトを作成します。

unity2015-03-17_10_17_03.png

using UnityEngine;

using System.Collections;

public class ExistChildScript : MonoBehaviour {

void Start () {
Debug.Log ("name:" + gameObject.name);

if (GameObject.Find ("Child").transform.IsChildOf (transform)) {
Debug.Log ("true");
} else {
Debug.Log ("false");
}
}
}

実行すると、Parent1はtrue、ParentNoChildはfalseになることが確認できます。

unity2015-03-17 10.22.40.png


子オブジェクトの数を取得する

childCountは子オブジェクトの数を取得することができます

using UnityEngine;

using System.Collections;

// 親オブジェクトにAddComponent
public class ChildCountScript : MonoBehaviour {

void Start () {
int count = transform.childCount;
Debug.Log ("Count=" + count);
}
}


ソースコード

ソースコードで見たい場合は以下からダウンロードしてください。

ParentChild - Github


参考サイト

【Unity初心者向け】オブジェクトの親子関係を操作する