Version: 2021.3
编辑场景模板
场景模板设置

自定义新场景创建

要在 Unity 从模板实例化新场景时运行自定义代码,请创建一个场景模板管线脚本并将其连接到模板。每次从该模板创建新场景时,Unity 也会创建管线脚本的新实例。

要将脚本连接到模板:

1.查看模板以编辑其属性 。 2.设置 Scene Template Pipeline 属性,使其指向您的场景模板管线脚本。

您还可以使用 SceneTemplateAsset.templatePipeline 方法通过 C# 将脚本连接到模板。

场景模板管线脚本必须派生自 [ISceneTemplatePipeline] 接口或 [SceneTemplatePipelineAdapter]。它应该实现您要响应的事件;例如,下面代码中的 BeforeTemplateInstantiationAfterTemplateInstantiation

示例:

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}");
        }
    }
}

场景模板实例化顺序

当您从具有可克隆依赖项的模板创建新场景时,Unity 会执行多个文件操作。大多数这些操作会触发 Unity 事件,您可以在脚本中监听这些事件并进行响应。

实例化顺序如下:

1.在 New Scene 对话框中单击 Create。Unity 调用: - 场景模板资源。 - 模板场景。这是与模板关联的 Unity 场景。 - 新场景。这是模板场景的新实例。

1.Unity 触发模板资源的 ISceneTemplatePipeline.BeforeTemplateInstantiation 事件,并将该资源绑定到它触发的 ISceneTemplatePipeline 脚本。 1.Unity 触发 SceneTemplate.NewTemplateInstantiating 事件。 1.Unity 创建一个新场景,它是模板场景的副本。 1.Unity 创建一个与新场景同名的文件夹,并将所有可克隆的依赖项复制到该文件夹中。 1.Unity 在内存中打开新场景,并触发以下事件: - EditorSceneManager.sceneOpening - MonoBehavior.OnValidate (在所有实现它的游戏对象上) - EditorSceneManager.sceneOpened

1.Unity 重新映射对所有可克隆资源的引用,使得新场景指向克隆资源。 1.Unity 保存新场景,并触发以下事件: - EditorSceneManager.sceneSaving - EditorSceneManager.sceneSaved 1.Unity 触发模板资源的 ISceneTemplatePipeline.AfterTemplateInstantiation,并将该资源绑定到它触发的 ISceneTemplatePipeline 脚本。 1.Unity 触发 SceneTemplate.NewTemplateInstantiated 事件。


编辑场景模板
场景模板设置