Создайте сборник в (другой) сцене - PullRequest
0 голосов
/ 03 мая 2018

когда я нажимаю кнопку, я загружаю новую сцену и создаю сборный префаб. проблема заключается в том, что сборный сценарий создается в старой сцене, а не в новой как создать сборную в следующей или конкретной сцене?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Создание префаба и использование SceneManager.MoveGameObjectToScene для перемещения объекта из старой сцены в новую. Из документов:

MoveGameObjectToScene

Перемещает GameObject из текущей сцены в новую сцену.

Вы можете перемещать только корневые объекты GameObjects из одной сцены в другую. Это означает, что GameObject для перемещения не должен быть дочерним по отношению к любому другому GameObject в его Сцена. Это работает только при перемещении GameObjects в сцену, которая уже загружен (добавка). Если вы хотите загрузить отдельные сцены, сделайте обязательно используйте DontDestroyOnLoad на GameObject, который вы хотели бы переместить на новую сцену, в противном случае Unity удаляет ее при загрузке новой сцены.

И пример:

public class Example : MonoBehaviour
{
    // Type in the name of the Scene you would like to load in the Inspector
    public string m_Scene;

    // Assign your GameObject you want to move Scene in the Inspector
    public GameObject m_MyGameObject;

    void Update()
    {
        // Press the space key to add the Scene additively and move the GameObject to that Scene
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(LoadYourAsyncScene());
        }
    }

    IEnumerator LoadYourAsyncScene()
    {
        // Set the current Scene to be able to unload it later
        Scene currentScene = SceneManager.GetActiveScene();

        // The Application loads the Scene in the background at the same time as the current Scene.
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(m_Scene, LoadSceneMode.Additive);

        // Wait until the last operation fully loads to return anything
        while (!asyncLoad.isDone)
        {
            yield return null;
        }

        // Move the GameObject (you attach this in the Inspector) to the newly loaded Scene
        SceneManager.MoveGameObjectToScene(m_MyGameObject, SceneManager.GetSceneByName(m_Scene));
        // Unload the previous Scene
        SceneManager.UnloadSceneAsync(currentScene);
    }
}
0 голосов
/ 03 мая 2018

Два варианта:

  1. Используйте сопрограмму, чтобы дождаться загрузки новой сцены
    • Я не совсем уверен, что это сработает, поскольку первая сцена будет выгружена, а сценарий потенциально завершится досрочно, если только он не является частью объекта DoNotDestroyOnLoad
  2. Используйте сценарий в новой сцене, чтобы вместо этого создать префаб
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...