版本:Unity 6 (6000.0)
语言:English
编辑场景模板
场景模板设置

自定义新场景创建

要运行自定义代码,当 Unity 从模板实例化新的场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,从本质上讲,将游戏分成多个部分进行设计和构建。 更多信息
参见 术语表
时,请创建一个场景模板管道脚本并将其连接到模板。每次从模板创建新场景时,Unity 都会创建一个管道脚本的新实例。

要将脚本连接到模板

  1. 检查模板以编辑其属性
  2. 场景模板管道属性设置为指向您的场景模板管道脚本。

您还可以使用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 事件。


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