2017-06-01 44 views
2

我剛開始使用Unity,我試圖將一個簡單的C#腳本放置在預定位置上的Prefabs(一些2D精靈)。問題在於,無論何時我將腳本應用於預製場景並嘗試播放場景,Unity都會凍結,並且顯然會生成一個耗盡所有內存的無限循環(有時甚至會給我一個黑屏),我必須強制殺死任務管理器中的進程。Unity C#腳本 - 沒有循環的無限循環...等什麼?

的代碼,但是,是非常簡單的,不包含任何迴路都:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class DungeonTest : MonoBehaviour { 

    public Transform DungeonBuilder; 

    // Use this for initialization 
     void Start() 
    { 
     Instantiate (DungeonBuilder, new Vector2 (1, 1), DungeonBuilder.rotation); 
     Instantiate (DungeonBuilder, new Vector2 (2, 2), DungeonBuilder.rotation); 
     Instantiate (DungeonBuilder, new Vector2 (3, 3), DungeonBuilder.rotation); 

    } 

    void Update() 
    { 


    } 
} 

它可以從層次結構窗口中可以看出,在啓動()方法創建幾個實例和內存使用量也變高達85%(!):

Unity infinite loop(?)

請什麼可能可能出了錯這裏建議。我已經看了幾個教程視頻,並且我已經閱讀了文檔中的相關段落,但我似乎無法弄清楚這一點。

謝謝!

+1

你的地牢建設者瓷磚上有任何腳本嗎?場景中的瓷磚正在以3的冪增長,這告訴我實例化的瓷磚上的某些東西也在製作新的瓷磚。也許你不小心把DungeonTest腳本放在了瓷磚預製件上? – Reasurria

+0

不,只有這個腳本被附加到預製件上。場景的層次結構只包括主攝像頭和將腳本作爲組件添加到的dungeonTile預製件。我按照文檔的「實例化預製件」一節中的說明進行操作。 – Bandi

+1

等等呃......這個腳本是預製的,因爲這個腳本是你的'DungeonBuilder'遊戲對象的一個​​組件?這意味着每個實例化的對象都會調用自己的'Start()',這會反過來創建3個更多的實例化對象等等,等等,這似乎與您的場景的屏幕截圖一致。 – Serlite

回答

7

你的DungeonTest腳本不應該在你正在實例化的預製件上。發生的事情是,每當預製件被實例化時,Start()就會被執行。

所以第一個瓷磚創建3個新的瓷磚。現在,每個瓷磚還可以製作3個新的瓷磚等等。

使用DungeonTile腳本在場景中創建一個新對象,並從要實例化的預製件中刪除所有腳本。

這並不意味着您的預製件上不能有腳本。請記住,只要將新實例添加到場景中,Start()方法中的任何內容都會執行。