为什么我的统一编辑器崩溃了?使用实例化
Why my unity editor crash? with using Instantiate
我运行这个代码。
团结停止了。
统一在 1 到 10 分钟后关闭
当我删除 Instantiate 时,此代码运行良好!
我怎样才能使这段代码 运行 更好?
Unity Editor.log 文件:https://github.com/Oein/UnityBuilds/blob/main/Editor.log.zip
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MakeGround : MonoBehaviour
{
public Sprite ground;
public Sprite leftGround;
public Sprite rightGround;
string[] map = {
"aaaaaaaaaa",
"aaaaaaaaaa",
"aaaaaaaaaa",
"zxxxxxxxxc"
};
// Start is called before the first frame update
void Awake()
{
for (int y = 0; y < map.Length; y++)
{
for (int x = 0; x < map[0].Length; x++)
{
print(x.ToString() + " At " + y.ToString());
this.transform.position = new Vector3(x, y, 0);
if (map[map.Length - 1 - y][x] != 'a')
{
Instantiate(gameObject , transform);
}
}
}
}
// Update is called once per frame
void Update()
{
}
}
您正在实例化 gameObject
这是此脚本附加到自身的对象!
那么会发生什么:
- 第一个
Awake
被调用
- 您实例化
n
次 gameObject
n
个新对象也有此脚本 MakeGround
附加
- 所以又调用了
n
次 Awake
- 你生成
n x n
次 gameObject
- ..... => 无限指数实例化
您可能更愿意使用没有附加该脚本的专用单独预制件,并通过例如
引用它
[SerializeField] GameObject prefabToInstantiate;
然后
Instantiate(prefabToInstantiate, transform);
我运行这个代码。 团结停止了。 统一在 1 到 10 分钟后关闭 当我删除 Instantiate 时,此代码运行良好! 我怎样才能使这段代码 运行 更好?
Unity Editor.log 文件:https://github.com/Oein/UnityBuilds/blob/main/Editor.log.zip
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MakeGround : MonoBehaviour
{
public Sprite ground;
public Sprite leftGround;
public Sprite rightGround;
string[] map = {
"aaaaaaaaaa",
"aaaaaaaaaa",
"aaaaaaaaaa",
"zxxxxxxxxc"
};
// Start is called before the first frame update
void Awake()
{
for (int y = 0; y < map.Length; y++)
{
for (int x = 0; x < map[0].Length; x++)
{
print(x.ToString() + " At " + y.ToString());
this.transform.position = new Vector3(x, y, 0);
if (map[map.Length - 1 - y][x] != 'a')
{
Instantiate(gameObject , transform);
}
}
}
}
// Update is called once per frame
void Update()
{
}
}
您正在实例化 gameObject
这是此脚本附加到自身的对象!
那么会发生什么:
- 第一个
Awake
被调用 - 您实例化
n
次gameObject
n
个新对象也有此脚本MakeGround
附加- 所以又调用了
n
次Awake
- 你生成
n x n
次gameObject
- ..... => 无限指数实例化
您可能更愿意使用没有附加该脚本的专用单独预制件,并通过例如
引用它[SerializeField] GameObject prefabToInstantiate;
然后
Instantiate(prefabToInstantiate, transform);