Unity C# 脚本 - 没有循环的无限循环......等等?

Unity C# scripting - infinite loop without a loop...wait what?

我刚开始使用 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()
    {


    }
}

从Hierarchy可以看出Window,Start()方法创建了多个实例,内存占用也高达85%(!):

Unity infinite loop(?)

请告知这里可能出了什么问题。我已经看过几个教程视频,也阅读了文档中的相关段落,但我似乎无法理解这一点。

谢谢!

你的 DungeonTest 脚本不应该在你正在实例化的预制件上。发生的事情是每次实例化预制件时都会执行 Start()。

因此第一个图块创建了 3 个新图块。这些瓷砖中的每一个现在也可以制作 3 个新瓷砖,依此类推直到无穷大。

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

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