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() 方法中的任何内容都会立即执行。
我刚开始使用 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() 方法中的任何内容都会立即执行。