У меня есть два добавленных класса, например this
У MazeGenerator есть делегат и событие:
public delegate void MazeReadyAction();
public static event MazeReadyAction OnMazeReady;
У MazeDirectives есть такой код:
void Awake()
{
MazeGenerator.OnMazeReady += StartDirectives;
}
void StartDirectives()
{
mazeCoinPositions = MazeGenerator.instance.GetRandomFloorPositions(coinsToFind);
for (int i = 0; i < mazeCoinPositions.Count; i++)
{
MazeCoin mazeCoin = Instantiate(mazeCoinPrefab, mazeCoinPositions[i], Quaternion.identity) as MazeCoin;
mazeCoin.transform.SetParent(transform);
}
}
который в основном создает монеты в лабиринте и устанавливает преобразование в качестве родителя .Эта функция добавляется к делегату, который выполняется в MazeGenerator:
void Start()
{
if (OnMazeReady != null)
{
OnMazeReady();
}
}
После того, как игрок умирает, я меняю сцену Game на сцену Menu следующим образом:
public void LoadByIndex(int sceneIndex)
{
SceneManager.LoadScene(sceneIndex);
}
, где указатель приходит из BuildНастройки.
Проблема в том, что после того, как игрок нажимает кнопку «Пуск» в меню, которое в основном снова меняет сцену на игру, после смерти
mazeCoin.transform.SetParent(transform);
не может достичь преобразования (SetParent ()transform )) и я получаю
MissingReferenceException: объект типа 'MazeDirectives' был уничтожен, но вы все еще пытаетесь получить к нему доступ.
Мне любопытно, почему делегат OnMazeReady выполняется правильно с первого разано не снова?