2016-02-29 6 views
0

Попытка создать сетку простого кругового игрового объекта, как только начнется игра. Пространство между каждым кругом должно быть 1.41 и 1.34 в 2D. Поэтому с небольшими математическими соображениями я бы подумал, что этот скрипт создаст эту сетку относительно исходного ссылочного объекта.Instantiate Freezing Unity

Однако при нажатии на игру в редакторе игра просто зависает, и я должен убить Unity с помощью моей командной строки.

Любые идеи?

Вот код:

void Awake() 
{ 
    Transform transform = gameObject.GetComponent<Transform>(); 
    for (float i = 1; i < 8; i++) 
    { 
     for (float j = 1; j<8;j++) 
     { 
      Instantiate(gameObject, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0)); 
     } 
    } 
} 
+0

попробуйте использовать отладчик, то и пройти через код, я уверен, что он будет замерзать на линии, которая имеет проблему и или проблема .. у вас отлажено это еще я думаю, что это 'gameObject' следует заменить с 'transform', так как это только что созданный экземпляр объекта в этой строке' Instantiate (gameObject, ' – MethodMan

+0

Из этого я думаю, что функция Awake работает на каждой копии и никогда не проходит мимо 1 на итераторе, бесконечно зацикливаясь любой способ остановить это? –

+1

@JamesHughes Вы правы, это называется один раз на каждой копии, так что вы только что создали бесконечный цикл. Просто отдельное создание сетки и объект вашего круга. – juniperi

ответ

1
void Awake() 
{ 
    Transform transform = gameObject.GetComponent<Transform>(); 
    for (float i = 1; i < 8; i++) 
    { 
     for (float j = 1; j<8;j++) 
     { 
      Instantiate(gameObject, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0)); 
     } 
    } 
} 

Глядя на ваш Instantantiate, вы используете геймобжекты. Это ссылка на игровой объект, содержащий этот скрипт. Так что вы, кажется, делаете, это копирование клона этого объекта. Созданный объект также запускает цикл, это запустит новый процесс создания и так далее.

В целом, вы создали бесконечный цикл. Вам нужно создать экземпляр чего-то другого, скорее всего, плитки.

public GameObject myTilePrefab; 
void Awake() 
{ 
    Transform transform = gameObject.GetComponent<Transform>(); 
    for (float i = 1; i < 8; i++) 
    { 
     for (float j = 1; j<8;j++) 
     { 
      Instantiate(myTilePrefab, transform.position + new Vector3(i * 1.41f, 0, j * 1.34f), new Quaternion(0, 0, 0, 0)); 
     } 
    } 
}