Не удается найти GameObject в новой сцене в DontDestroyOnLoad - PullRequest
0 голосов
/ 02 января 2019

У меня есть GameController в Scene1, и я сделал это DontDestroyOnLoad.

Когда я загрузил Scene2, я пытаюсь найти GameObject в Scene2 иobj2 это null, а obj1 нет.

Почему?

Как я могу найти GameObjectInScene2?

public class GameController: MonoBehaviour
{
    private void Awake()
    {
        DontDestroyOnLoad(this);
    }

    private void Start()
    {
        SceneManager.LoadScene("Scene2");
        GameObject obj1 = GameObject.Find("GameObjectInScene1");
        GameObject obj2 = GameObject.Find("GameObjectInScene2");
    }
}

1 Ответ

0 голосов
/ 02 января 2019

Start больше не вызывается, так как ваш компонент уже запустил его в Scene1

. Вы можете зарегистрироваться на SceneManager.sceneLoaded и вместо этого выполнить поиск в обратном вызове.

Я бы также сохранил глобальные ссылки вроде

private GameObject obj1;
private GameObject obj2;

void Start()
{
    // This first line just makes sure the listener isn't added twice
    SceneManager.sceneLoaded -= OnSceneLoaded;

    // Whenever a scene is loaded call OnSceneLoaded
    SceneManager.sceneLoaded += OnSceneLoaded;   

    obj1 = GameObject.Find("GameObjectInScene1");

    SceneManager.LoadScene("Scene2");
}

void OnDestroy ()
{
    // Allways clean up listeners when not needed anymore!
    SceneManager.sceneLoaded -= OnSceneLoaded;
}

void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
    if(scene.name == "Scene2")
    {
        obj2 = Find("GameObjectInScene2");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...