Почему мой редактор unity вышел из строя? с помощью создания экземпляра

#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);