Настройка создания новой сцены
Чтобы запустить пользовательский код, когда Unity инстанцирует новую сцену из шаблона, создайте скрипт конвейера шаблона Scene и подключите его к шаблону. Каждый раз, когда вы создаете новую сцену из шаблона, Unity также создает новый экземпляр скрипта конвейера.
Чтобы подключить скрипт к шаблону:
- Осмотрите шаблон, чтобы изменить его свойства.
- Установите свойство Scene Конвейер шаблона так, чтобы оно указывало на ваш скрипт Scene Template Pipeline.
Вы также можете использовать методы SceneTemplateAsset.templatePipeline для подключения скрипта к шаблону через C#.
Скрипт конвейера шаблона Scene должен быть получен из ISceneTemplatePipeline интерфейс или SceneTemplatePipelineAdapter. Он должен реализовывать события, на которые вы хотите отреагировать; например, BeforeTemplateInstantiation или AfterTemplateInstantiation в коде ниже.
Пример:
using UnityEditor.SceneTemplate;
using UnityEngine;
using UnityEngine.SceneManagement;
public class DummySceneTemplatePipeline : ISceneTemplatePipeline
{
public void BeforeTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, bool isAdditive, string sceneName)
{
if (sceneTemplateAsset)
{
Debug.Log($"Before Template Pipeline {sceneTemplateAsset.name} isAdditive: {isAdditive} sceneName: {sceneName}");
}
}
public void AfterTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, Scene scene, bool isAdditive, string sceneName)
{
if (sceneTemplateAsset)
{
Debug.Log($"After Template Pipeline {sceneTemplateAsset.name} scene: {scene} isAdditive: {isAdditive} sceneName: {sceneName}");
}
}
}
Scene Последовательность экземплярирования шаблона
Когда вы создаете новую сцену из шаблона с клонируемыми зависимостями, Unity выполняет несколько операций с файлами. Большинство из этих операций вызывают события Unity, которые вы можете прослушивать и реагировать на них в скриптах.
После создания новой сцены Unity выполняет следующие действия:
Создает ассет шаблона сцены, сцену шаблона, связанную с шаблоном, и новый экземпляр сцены шаблона.
Запускает событие
ISceneTemplatePipeline.BeforeTemplateInstantiationдля ассета шаблона и привязывает ассет к скриптуISceneTemplatePipeline, который он запускает.Вызывается событие
SceneTemplate.NewTemplateInstantiating.Создает новую сцену, которая является копией шаблонной сцены.
Создает папку с тем же именем, что и новая сцена, и копирует в нее все клонируемые зависимости.
- Открывает новую сцену в памяти и вызывает следующие события:
EditorSceneManager.sceneOpeningMonoBehavior.OnValidate(для всех GameObjects, которые его применяют)EditorSceneManager.sceneOpened
Пересопоставляет ссылки на все клонируемые ассеты, так что новая сцена указывает на клоны.
- Сохраняет новую сцену и вызывает следующие события:
Запускает
ISceneTemplatePipeline.AfterTemplateInstantiationдля ассета шаблона и привязывает ассет к скриптуISceneTemplatePipeline, который он запускает.Вызывается событие
SceneTemplate.NewTemplateInstantiated.