181
166

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-03-17

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

オブジェクトを取得する

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

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

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

181
166
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
181
166

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?