2017-06-01 170 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()方法中的任何内容都会执行。