翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷,而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。
自定义新场景创建 🔗
要在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调用以下内容:
- 场景模板资产。
- 模板场景。这是与模板相关联的Unity场景。
- 新场景。这是模板场景的新实例。
- Unity触发模板资产的
ISceneTemplatePipeline.BeforeTemplateInstantiation
事件,并将资产绑定到触发它的ISceneTemplatePipeline
脚本。 - Unity触发
SceneTemplate.NewTemplateInstantiating
事件。 - Unity创建一个与模板场景相同的新场景副本。
- Unity创建一个与新场景同名的文件夹,并将所有可克隆的依赖项复制到该文件夹中。
- Unity在内存中打开新场景,并触发以下事件:
EditorSceneManager.sceneOpening
MonoBehavior.OnValidate
(对所有实现此事件的GameObject)EditorSceneManager.sceneOpened
- Unity重新映射对所有克隆资产的引用,以便新场景指向克隆资源。
- Unity保存新场景,并触发以下事件:
EditorSceneManager.sceneSaving
EditorSceneManager.sceneSaved
- Unity触发模板资产的
ISceneTemplatePipeline.AfterTemplateInstantiation
事件,并将资产绑定到触发它的ISceneTemplatePipeline
脚本。 - Unity触发
SceneTemplate.NewTemplateInstantiated
事件。
结论 🔗
搬砖愉快!