【发布时间】:2017-11-02 02:57:40
【问题描述】:
我刚刚开始使用 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%(!):
请就此处可能出现的问题提出建议。我已经看过几个教程视频,并且我已经阅读了文档中的相关段落,但我似乎无法弄清楚这一点。
谢谢!
【问题讨论】:
-
你的地下城建造者板块上是否有任何脚本?场景中的瓦片以 3 的幂增长,这告诉我实例化瓦片上的某些东西也在制作新瓦片。也许您不小心将 DungeonTest 脚本放在了 tile 预制件上?
-
不,只有这个脚本附加到预制件上。场景的层次结构仅包括主摄像机和作为组件添加此脚本的 dungeonTile 预制件。我按照文档“实例化预制件”部分中的说明进行操作。
-
等一下……这个脚本在预制件上,因为这个脚本是你的
DungeonBuilderGameObject 的一个组件?这意味着每个实例化对象都会调用自己的Start (),这反过来又会创建另外 3 个实例化对象,依此类推,等等。这似乎与您的场景的屏幕截图一致。
标签: c# unity3d monodevelop infinite-loop