Subscribed unsubscribe Subscribe Subscribe

UnityのTransformの子要素機能は大量に要素を詰めると重い

Sceneロード実行時に128^2個(16384個)のGameObjectをInstantiateし、それを全てUnityのGameObjectに直接の子Transformとして指定するようにしたところ、Sceneのロードがかなり重くなりました。

更に、各子要素のあるメソッドを呼んでいたのですが、これはInstantiateするのと同じくらい時間がかかっていました。

回避策として子要素に追加する処理を除いたところ、動作が従来の3倍も速くなりました。
Hierarchyは見難くなるものの、Unityでは大量のGameObjectをある要素の子にするのはやめた方が良いようです。

// 遅いコード
GameObject p = ...;
for(int i = 0; i < 128*128; i++){
    ((GameObject) Instantiate (...)).transform.parent = p.transform;
}