オブジェクトの親子関係をスクリプトから操作する方法をまとめてみました。
オブジェクトを取得する
子オブジェクト → 親オブジェクト
子オブジェクトのスクリプトから親オブジェクトを取得します。
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には親子関係がありません
using UnityEngine;
using System.Collections;
public class WannaBeChild : MonoBehaviour {
void Start () {
transform.parent = GameObject.Find("WannaBeParent").transform;
}
}
実行後
親子関係になったことが確認できます。
親オブジェクトを解除する
子オブジェクトから親オブジェクトを解除するにはtransform.parentをnullにすることで親子関係を解除します。
ChildObject.transform.parent = null;
子オブジェクトを一括で解除する
親オブジェクトから子オブジェクトの全てを解除する場合、DetachChildren()を使用すれば一括で解除できます。
RootObject.transform.DetachChildren();
子オブジェクトが存在するか判定する
子オブジェクトが存在するかどうかを判定するには、IsChildOf()を使用します。
例として、Parent1(子あり)とParentNoChild(子なし)のオブジェクトを作成します。
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になることが確認できます。
子オブジェクトの数を取得する
childCountは子オブジェクトの数を取得することができます
using UnityEngine;
using System.Collections;
// 親オブジェクトにAddComponent
public class ChildCountScript : MonoBehaviour {
void Start () {
int count = transform.childCount;
Debug.Log ("Count=" + count);
}
}
ソースコード
ソースコードで見たい場合は以下からダウンロードしてください。
ParentChild - Github