Unity C#scripting - 没有循环的无限循环......等什么?

时间:2017-06-01 05:50:49

标签: c# unity3d monodevelop infinite-loop

我刚刚开始使用Unity,我正在尝试整理一个简单的C#脚本,将预制件(一些2D精灵)置于预定位置。问题是,每当我将脚本应用到预制件并尝试播放场景时,Unity会冻结并显然会产生一个耗尽所有内存的无限循环(有时甚至会给我一个黑屏)并且我必须强行杀死任务管理器中的过程。

然而,代码非常简单,根本不包含循环:

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()
    {


    }
}

从层次结构窗口可以看出,Start()方法创建了几个实例,内存使用率也高达85%(!):

Unity infinite loop(?)

请告知此处可能出现的问题。我已经看了几个教程视频,我已经阅读了文档中的相关段落,但我似乎无法想出这个。

谢谢!

1 个答案:

答案 0 :(得分:8)

您的Dun​​geonTest脚本不应位于您要实例化的预制件上。发生的事情是每次预制实例化时都会执行Start()。

所以第一个瓷砖会创建3个新瓷砖。这些瓷砖中的每一个现在也可以制作3个新瓷砖等等。

使用DungeonTile脚本在场景中创建一个新对象,并从正在实例化的预制件中删除所有脚本。

这并不意味着您不能在预制件上安装脚本。请记住,只要将新实例添加到场景中,Start()方法中的任何内容都会立即执行。