Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした