2015-01-11 1 views
0

Я пытаюсь создать плоский мир из кубов, у меня есть несколько вложенных циклов для циклического перемещения по координатам и поместить каждый блок. Когда я запускаю приложение, механизм игры единства зависает. Из того, что я могу сказать, петли правильные, должны работать и выходить должным образом. Первоначально я думал, что, возможно, я пытался создать слишком много объектов, поэтому я значительно уменьшил количество, но я все равно получаю ту же проблему. Я смотрел на этот код некоторое время и не могу найти проблему, поэтому мне было интересно, знает ли кто-нибудь, что это за проблема?Unity freeze on run, looped Instantiate

using UnityEngine; 
using System.Collections; 

public class Chunk : MonoBehaviour { 

public readonly int chunkWidth = 2; 
public readonly int chunkHeight = 2; 
public GameObject TestBlock; 

// Use this for initialization 
void Start() { 
    spawnChunk (0,0); 
} 

// Update is called once per frame 
void Update() { 

} 

public void spawnChunk(int posX, int posZ){ 
    for(int x = 0; x <= chunkWidth; x++){ 
     for(int y =0; y <= chunkHeight; y++){ 
      for(int z = 0; x <= chunkWidth; z++){ 
       //create object 
       Instantiate(TestBlock, new Vector3(x + posX, y, z + posZ), Quaternion.identity); 
      } 
     } 
    } 
} 
} 
+0

Вы уверены, что это не просто исключение? 'TestBlock' будет null. –

+0

TestBlock назначается в движке, вы перетаскиваете скрипт на объект, в этом случае пустой объект, а затем в инспекторе вы перетаскиваете объект в тип gameObject (TestBlock) в этом скрипте. – user2395615

+0

Но в какой момент он назначен во время выполнения? Вы пробовали отлаживать свой код, чтобы проверить значение в 'spawnChunk'? Можете ли вы перешагнуть вызов 'Instantiate' в отладчике? –

ответ

0

В ваш самый глубокий цикл, x всегда будет меньше, чем chunkWidth, вызывая бесконечный цикл; z ничего не проверяется.

Изменение:

for(int z = 0; x <= chunkWidth; z++){ 

к:

for(int z = 0; z <= chunkWidth; z++){ 

и Unity больше не должны замерзнуть.