2016-02-29 96 views
0

試圖在遊戲開始時立即創建一個簡單的圓形遊戲物體的網格。每個圓之間的空間需要是2D的1.41和1.34。所以用一點數學,我會認爲這個腳本會創建相對於初始參考對象的這個網格。實例化凍結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'應該被替換因爲這是這一行中新創建的對象實例'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)); 
     } 
    } 
} 
相關問題