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

  • 108
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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

オブジェクトを取得する

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

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

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初心者向け】オブジェクトの親子関係を操作する