要在 Unity 从模板实例化新场景时运行自定义代码,请创建一个场景模板管线脚本并将其连接到模板。每次从该模板创建新场景时,Unity 也会创建管线脚本的新实例。
要将脚本连接到模板:
您还可以使用 SceneTemplateAsset.templatePipeline
方法通过 C# 将脚本连接到模板。
场景模板管线脚本必须派生自 [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}");
}
}
}
当您从具有可克隆依赖项的模板创建新场景时,Unity 会执行多个文件操作。大多数这些操作会触发 Unity 事件,您可以在脚本中监听这些事件并进行响应。
实例化顺序如下:
Unity 触发模板资源的 ISceneTemplatePipeline.BeforeTemplateInstantiation
事件,并将该资源绑定到它触发的 ISceneTemplatePipeline
脚本。
Unity 触发 SceneTemplate.NewTemplateInstantiating
事件。
Unity 创建一个新场景,它是模板场景的副本。
Unity 创建一个与新场景同名的文件夹,并将所有可克隆的依赖项复制到该文件夹中。
Unity 重新映射对所有可克隆资源的引用,使得新场景指向克隆资源。
Unity 触发模板资源的 ISceneTemplatePipeline.AfterTemplateInstantiation
,并将该资源绑定到它触发的 ISceneTemplatePipeline
脚本。
Unity 触发 SceneTemplate.NewTemplateInstantiated
事件。