Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Многосценовое редактирование

Мульти СценаСцена содержит среду и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
Редактирование позволяет одновременно открывать в редакторе несколько сцен, и упрощает управление сценами во время выполнения.

Возможность открывать несколько сцен в редакторе позволяет создавать большие потоковые миры и упрощает рабочий процесс при совместном редактировании сцен.

Эта страница описывает:

  • Интеграция редактирования нескольких сцен в редактор.
  • Сценарии редактора и API сценариев среды выполнения
  • Текущие известные проблемы

В редакторе

Чтобы открыть новую сцену и добавить ее в текущий список сцен в иерархии, либо выберите Открыть добавление сцены в контекстном меню объекта сцены, либо перетащите одну или несколько сцен из Окно проектаОкно, в котором отображается содержимое папки Assets (вкладка Project ) Подробнее
См. в Словарь
в окне иерархии.

Open Scene Additive добавит выбранный актив сцены к текущим сценам, отображаемым в иерархии.
Open Scene Additive добавит выбранный актив сцены к текущим сценам, отображаемым в иерархии.

Если в редакторе открыто несколько сцен, содержимое каждой сцены отображается отдельно в окне иерархии. Содержимое каждой сцены отображается под полосой разделителя сцен, которая показывает имя сцены и состояние ее сохранения.

Окно иерархии, в котором одновременно открыто несколько сцен
Окно иерархии, в котором одновременно открыто несколько сцен

Находясь в иерархии, сцены можно загружать или выгружать, чтобы показать или скрыть игровые объекты. Основной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. Словарь
, содержащийся в каждой сцене. Это отличается от добавления и удаления их из окна иерархии.

Разделители сцен можно свернуть в иерархии к содержимому сцены, что может помочь вам перемещаться по иерархии, если у вас загружено много сцен.

При работе с несколькими сценами для каждой измененной сцены потребуется сохранить изменения, поэтому можно одновременно открыть несколько несохраненных сцен. Сцены с несохраненными изменениями будут отмечены звездочкой рядом с именем на панели разделителя сцен.

Звездочка в разделителе сцен, указывающая, что в этой сцене есть несохраненные изменения.
Звездочка в разделителе сцен, указывающая, что в этой сцене есть несохраненные изменения.

Каждую сцену можно сохранить отдельно через контекстное меню на панели разделителя. Если выбрать «Сохранить сцену» в меню «Файл» или нажать Ctrl/Cmd + S, изменения будут сохранены во всех открытых сценах.

Контекстное меню в полосах разделителей сцен позволяет выполнять другие действия с выбранной сценой.

Меню разделителя сцен для загруженных сцен

Set Active Scene Это позволяет вам указать, в какой сцене создаются/создаются новые игровые объекты. Всегда должна быть одна сцена, помеченная как активная сцена.
Save Scene Сохраняет изменения только для выбранной сцены.
Save Scene As Сохраняет выбранную сцену (вместе с любыми текущими изменениями) как новый актив сцены.
Save All Сохраняет изменения во всех сценах.
Unload Scene Выгружает сцену, но сохраняет сцену в окне Hierarchy.
Remove Scene Выгружает и удаляет сцену из окна Hierarchy.
Select Scene Asset Выбирает актив сцены в окне проекта.
GameObject Предоставляет подменю, позволяющее создавать игровые объекты в выбранной сцене. Меню отражает создаваемые элементы, доступные в главном меню GameObject Unity. (показано ниже)
Подменю GameObject в меню панели разделителя сцен
Подменю GameObject в меню панели разделителя сцен

Меню разделителя сцен для незагруженных сцен:

Load Scene Загружает содержимое сцены
Remove Scene Удалите сцену из окна Hierarchy.
Select Scene Asset Выбирает актив сцены в окне проекта.

Запекание карт освещения с несколькими сценами

Чтобы запечь Lightmapпредварительно обработанную текстуру, которая содержит эффекты источников света на статических объектах в сцене . Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
Просматривать в Словарь
данные
для нескольких сцен одновременно. откройте сцены, которые вы хотите запечь, отключите режим «Авто» в окне освещения и нажмите кнопку «Создать», чтобы построить освещение.

Входными данными для расчета освещения являются статическая геометрия и освещение всех сцен. Поэтому тени и отражения света GI будут работать во всех сценах. Однако карты освещения и Enlightenсистема освещения от Geomerics используются в Unity для создания карт освещения и глобального освещения в реальном времени. Подробнее
Смотреть в Словарь
в режиме реального времени Global ОсвещениеГруппа методов, которые моделируют как прямое, так и непрямое освещение для получения реалистичных результатов освещения. В Unity есть две системы глобального освещения, сочетающие прямое и непрямое освещение: запеченное глобальное освещение и глобальное освещение в реальном времени.
См. в Словаре
данные разделены на данные, которые загружаются/выгружаются отдельно для каждого место действия. Карты освещения и атласы данных Enlighten Realtime Global Illumination разделены между сценами. Это означает, что карты освещения между сценами никогда не используются совместно, и их можно безопасно выгрузить при выгрузке сцены. Данные Lightprobe в настоящее время всегда являются общими, и все lightprobe для всех сцен, запеченных вместе, загружаются одновременно.

Кроме того, вы можете автоматизировать создание карт освещения для нескольких сцен, используя функцию Lightmapping.BakeMultipleScenes в скрипте редактора.

Запекание данных NavMesh с несколькими сценами

Чтобы запечь NavMeshсетку, которую Unity создает для аппроксимации пешеходных зон и препятствий в вашей среде для поиска пути и навигация под управлением ИИ. Подробнее
Просматривать в Словарь
данные
для нескольких сцен одновременно. откройте сцены, которые вы хотите запечь, и нажмите кнопку «Выпечка» в окне навигации. Данные NavMesh будут запечены в единый ресурс, общий для всех загруженных сцен. Данные сохраняются в папку, соответствующую имени текущей активной сцены (например, ActiveSceneName/NavMesh.asset). Все загруженные сцены будут использовать этот ресурс NavMesh. После запекания NavMesh затронутые сцены должны быть сохранены, чтобы сделать ссылку между сценой и NavMesh постоянной.

Кроме того, вы можете автоматизировать построение данных NavMesh для нескольких сцен, используя функцию NavMeshBuilder.BuildNavMeshForMultipleScenes в сценарии редактора.

Запекание данных отбраковки окклюзии с несколькими сценами

Чтобы запечь данные отсечения окклюзии сразу для нескольких сцен, откройте сцены, которые вы хотите запечь, откройте окно отсечения окклюзии (меню: Окно > ВизуализацияПроцесс отрисовки графики на экран (или в текстуру рендеринга). По умолчанию основная камера в Unity отображает свой вид на Подробнее
См. в Словарь
> Отсечение окклюзииФункция, которая отключает визуализацию объектов, когда они в данный момент не видны камере, поскольку они скрыты (закрыты) другими объектами. Подробнее
См. в Словарь
) и нажмите кнопку Выпечка . Данные отсечения окклюзии сохраняются в активе с именем OcclusionCullingData.asset в папке, соответствующей имени текущей активной сцены. Например, Assets/ActiveSceneName/OcclusionCullingData.asset. Ссылка на данные добавляется в каждую открытую сцену. После запекания данных отбраковки окклюзии сохраните затронутые сцены, чтобы сделать ссылку между сценой и данными окклюзии постоянной.

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

Режим воспроизведения

В режиме воспроизведения с несколькими сценами в иерархии появится дополнительная сцена под названием DontDestroyOnLoad.

До Unity 5.3 любые объекты, которые вы создавали в Playmode и помечали как «DontDestroyOnLoad», по-прежнему отображались в иерархии. Эти объекты не считаются частью какой-либо сцены, но для того, чтобы Unity по-прежнему отображала объекты, и чтобы вы могли их просматривать, эти объекты теперь отображаются как часть специальной сцены DontDestroyOnLoad.

У вас нет доступа к сцене DontDestroyOnLoad, и она недоступна во время выполнения.

Настройки сцены

Ряд настроек специфичен для каждой сцены. Это:

  • RenderSettings и LightmapSettings (оба находятся в окне освещения)
  • Настройки NavMesh
  • Настройки сцены в окне Occlusion Culling.

Это работает так, что каждая сцена будет управлять своими собственными настройками, и только настройки, связанные с этой сценой, будут сохранены в файле сцены.

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

При переключении активной сцены в редакторе или во время выполнения все настройки новой сцены будут применены и заменят все предыдущие настройки.

Сценарий

Сценарий редактора

Для сценариев редактора мы предоставляем структуру сцены и EditorSceneManager API и вспомогательный класс SceneSetup.

Структура Scene доступна как в редакторе, так и во время выполнения и содержит ряд доступных только для чтения свойств, относящихся к самой сцене, например как его имя и путь к ресурсу.

Класс EditorSceneManager доступен только в редакторе. Он является производным от SceneManager и имеет ряд функций, которые позволяют реализовать все описанные выше функции редактирования нескольких сцен с помощью сценариев редактора.

Класс SceneSetup – это небольшой служебный класс для хранения информации о сцене, которая в настоящее время находится в иерархии.

Классы Отменить и PrefabUtility были расширены. для поддержки нескольких сцен. Теперь вы можете создать экземпляр Prefabтипа актива, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов в сцене. Подробнее
Посмотреть в Словарь
в данной сцене, используяPrefabUtility.InstantiatePrefab, и вы можете перемещать объекты в корень сцены невыполнимым образом, используя Undo.MoveGameObjectToScene

Примечание. Чтобы использовать Undo.MoveGameObjectToScene, вы должны убедиться, что GameObject уже находится в корне сцены, в которой он находится в данный момент.

Сценарии во время выполнения

Для сценариев во время выполнения функции для работы с несколькими сценами, такие как LoadScene и UnloadScene, находятся в SceneManager.

Примечания

В меню «Файл» Сохранить сцену как сохранит только активную сцену. Сохранить сцену сохранит все измененные сцены, включая предложение назвать сцену без названия, если она существует.

Создание нового актива сцены из меню «Создать» окна «Проект»
Создание нового актива сцены из меню «Создать» окна «Проект».

Советы и рекомендации

Можно добавить сцену в иерархию, сохранив ее незагруженное состояние, удерживая клавишу Alt при перетаскивании. Это дает вам возможность загрузить сцену позже, когда это необходимо.

Новые сцены можно создавать с помощью меню Создать в окне проекта. Новые сцены будут содержать настройки игровых объектов по умолчанию.

Чтобы избежать необходимости настраивать иерархию каждый раз при перезапуске Unity или упростить сохранение различных настроек, вы можете использовать EditorSceneManager.GetSceneManagerSetup, чтобы получить список объектов SceneSetup, описывающих текущую установку. Затем вы можете сериализовать их в ScriptableObject или что-то еще вместе с любой другой информацией о настройке сцены, которую вы, возможно, захотите сохранить. Чтобы восстановить иерархию, просто заново создайте список SceneSetup и используйте EditorSceneManager.RestoreSceneManagerSetup.

Во время выполнения, чтобы получить список загруженных сцен, просто получите sceneCount и выполните итерацию по сценам, используя GetSceneAt.

Вы можете получить сцену, которой принадлежит GameObject, с помощью GameObject.scene, а также вы можете переместить GameObject в корень сцены, используя SceneManager.MoveGameObjectToScene.

Рекомендуется избегать использования DontDestroyOnLoad для сохранения игровых объектов менеджера, которые вы хотите сохранить при загрузке сцены. Вместо этого создайте сцену менеджера, в которой есть все ваши менеджеры, и используйте SceneManager.LoadScene(, LoadSceneMode.Additive) и SceneManager.UnloadScene для управления ходом игры.

Известные проблемы

  • Ссылки между сценами не поддерживаются и запрещены в режиме редактирования. В режиме воспроизведения они разрешены, потому что сцены нельзя сохранять.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3