要运行自定义代码,当 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
事件。