Единство, делегат не может добиться трансформации - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть два добавленных класса, например 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 выполняется правильно с первого разано не снова?

1 Ответ

0 голосов
/ 07 декабря 2018

Вы должны правильно добавлять и удалять слушателей.Например, в OnEnable () добавьте слушателей, а в OnDisable () удалите их, как показано ниже:

Вы также можете использовать UnityEvent и UnityAction в единстве.

private void OnEnable(){
       MazeGenerator.OnMazeReady += StartDirectives;   
}
private void OnDisable(){
       MazeGenerator.OnMazeReady -= StartDirectives;   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...