我刚刚开始使用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%(!):
请告知此处可能出现的问题。我已经看了几个教程视频,我已经阅读了文档中的相关段落,但我似乎无法想出这个。
谢谢!
答案 0 :(得分:8)
您的DungeonTest脚本不应位于您要实例化的预制件上。发生的事情是每次预制实例化时都会执行Start()。
所以第一个瓷砖会创建3个新瓷砖。这些瓷砖中的每一个现在也可以制作3个新瓷砖等等。
使用DungeonTile脚本在场景中创建一个新对象,并从正在实例化的预制件中删除所有脚本。
这并不意味着您不能在预制件上安装脚本。请记住,只要将新实例添加到场景中,Start()方法中的任何内容都会立即执行。