#unity3d #crash #instantiation
Вопрос:
Я запустил этот код. И юнити остановилась. И unity закрывается через 1-10 минут, когда я удаляю экземпляр, этот код работает очень хорошо! Как я могу сделать так, чтобы этот код работал отлично?
Редактор Unity.файл журнала : 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()
{
}
}
Ответ №1:
Вы создаете экземпляр gameObject
объекта, к которому прикреплен этот скрипт!
Итак, что происходит, так это:
- Первый
Awake
называется - Вы создаете экземпляры
n
разgameObject
- К
n
новым объектам такжеMakeGround
прикреплен этот скрипт - Так еще
n
разAwake
называется - Ты порождаешь
n x n
временаgameObject
- ….. => Бесконечное экспоненциальное создание экземпляра
Вы, вероятно, предпочли бы использовать выделенный отдельный сборный модуль, к которому не прикреплен этот скрипт, и ссылаться на него, например.
[SerializeField] GameObject prefabToInstantiate;
а потом сделайте
Instantiate(prefabToInstantiate, transform);