投稿者 tel | 2013年6月13日

Unityの子要素の取得順番

UnityでTransformのGetChildで取れる順番のメモ。

preview

hierarchy

こんなふうにキューブを空のゲームオブジェクトに子要素として追加する。ParentAとParentBに以下のスクリプトをつける。

public class ChildOrder : MonoBehaviour
{
	void Start()
	{
		StartCoroutine(Play());
	}

	IEnumerator Play()
	{
		for(int i = 0; i < transform.childCount; i++)
		{
			transform.GetChild(i).animation.Play();
			yield return new WaitForSeconds(1.0f);
		}
	}
}

Web Playerで実行

上記を実行すると青と赤のキューブが回転する順番が逆になっている。どちらのキューブも左から、Child0からChild3の順に並べてある。これはParentAの子要素は最初にデフォルトの名前(Cube)を変更してからParentAの子要素にしている。対してParentBは子要素にしてから名前を変更している。

つまり子要素にした瞬間に名前でソートされてGetChildで取得できる順番が決まっているようである。

結論としてはGetChildで順番に依存するような処理はしないほうがいい。順番に処理したい場合は別途配列を用意して手動で追加するのが良さそう。

LINQでうまいこと名前順に処理しているコードが載っていた。
http://answers.unity3d.com/questions/276230/iterating-through-children-of-transform-is-there-a.html


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。