2016-08-04 23 views
0

を移動私は子供(球)をたくさん持っているゲームオブジェクトを持っているすべての子供

enter image description here

それは崩壊している。私が試したことは、Vector3.Lerpですべての要素を移動するためにforeachループを使用しています。残念ながら、すべてが非常にひどく遅れて始まります。

は、私は主な問題は、GameObject.Find()から来ていると思います彼らはこの

enter image description here

foreach (Transform child in GameObject.Find("Carbon").transform) 
{ 
     child.transform.position = Vector3.Lerp(child.transform.position, 
            new Vector3(child.transform.position.x, 
               child.transform.position.y - 200, 
               child.transform.position.z), 0.2f); 
} 
+1

構造が「崩壊する」効果を得たい場合は、エディタ内で各子に無効な剛体(およびオプションで球コライダ)を割り当ててから、foreachループを使用してすべてを有効にします彼らが立ち去る時間。この_might_は、メインスレッド上の非常に多くの別々の補間よりも優れたパフォーマンスをもたらします。 – cpimhoff

+0

物理を使用してオブジェクトを移動していない場合は、剛体とコライダーのコンポーネントがある場合はそれらを取り外します。更新機能でオブジェクトを移動する場合は、['Time.DeltaTime'](https://docs.unity3d.com/ScriptReference/Time-deltaTime.html)を使用してスムーズに移動する必要があります。 – ColmanJ

答えて

3

のようにスムーズに倒れ持っているのは素晴らしいことか。あなたのコードの外見から、foreachのすべてで炭素の変換が見つかります。 100個のオブジェクトがある場合、1つのフレームで「GameObject.Find」を100回使用します。 これは、変換キャッシュすることで固定することができます。

List<Transform> carbonList = new List<Transform>(); 

void Start() { 
    //cache carbon tranform in Start() or OnEnable() 
    carbonList.AddRange(transform.GetComponentsInChildren<Transform>());//use this if you attach your code in object parent 

    //loop transform form caching list so it will not keep finding transform and cause lagging 
    foreach (Transform child in carbonList) 
    { 
     var childPos = child.position; 
     child.position = Vector3.Lerp(childPos, new Vector3(childPos.x, childPos.y - 200, childPos.z), 0.2f); 
    } 
} 

スクリプトが親オブジェクトにない場合は、代わりに検索タグを使用することができます。 http://answers.unity3d.com/questions/24257/how-do-i-find-all-game-objects-with-the-same-name.html

0

あなたのアニメーショングラフィックは、すべての球がお互いに同じ相対位置を維持しているように見えます。 「崩壊する」というのではなく、体として一緒に落ちているように見えます。それぞれの球をアニメーション化するのではなく、ひとつの親オブジェクトの下にすべてを配置して、その親をアニメーション化したい場合は、それが必要です。

関連する問題