Version: 6000.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. “新建场景”对话框中单击“创建”。Unity 调用:
    • 场景模板资产。
    • 模板场景。这是与模板关联的 Unity 场景。
    • 新建场景。这是模板场景的新实例。
  2. Unity 会触发ISceneTemplatePipeline.BeforeTemplateInstantiation事件,并将该资产绑定到ISceneTemplatePipeline它触发的脚本。

  3. Unity 会触发SceneTemplate.NewTemplateInstantiating事件。

  4. Unity 会创建一个新场景,该场景是模板场景的副本。

  5. Unity 会创建一个与新场景同名的文件夹,并将所有可克隆的依赖项复制到该文件夹中。

  6. Unity 在内存中打开新场景,并触发以下事件:
  7. Unity 会重新映射到所有可克隆资产的引用,因此新场景指向克隆。

  8. Unity 保存新场景,并触发以下事件:
  9. Unity 会触发ISceneTemplatePipeline.AfterTemplateInstantiation,并将资产绑定到ISceneTemplatePipeline它触发的脚本。

  10. Unity 会触发SceneTemplate.NewTemplateInstantiated事件。


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