# ISceneTemplatePipeline

> Derive from this interface to package a custom code sequence when a Scene template is instantiated. ISceneTemplatePipeline is instantiated once when a template is instantiated, and is notified multiple times during the instantiation sequence.

## Definition

* **Type:** Interface
* **Namespace:** [UnityEditor.SceneTemplate](/engine/6000.7/script-reference/unityeditor/scenetemplate.md)
* **Assembly:** UnityEditor

```csharp
public interface ISceneTemplatePipeline
```

## Examples

```csharp
using UnityEngine.SceneManagement;
using UnityEditor.SceneTemplate;

public class MySceneTemplatePipeline : ISceneTemplatePipeline
{
    public virtual bool IsValidTemplateForInstantiation(SceneTemplateAsset sceneTemplateAsset)
    {
        // Check if the scene template is valid for this project.
        return true;
    }

    public virtual void BeforeTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, bool isAdditive, string sceneName)
    {
        // Do some work before instantiating the new scene based on the template.
        UnityEngine.Debug.Log($"BeforeTemplateInstantiation {sceneTemplateAsset.name} isAdditive: {isAdditive} sceneName: {sceneName}");
    }

    public virtual void AfterTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, Scene scene, bool isAdditive, string sceneName)
    {
        // Do some work after instantiating the new scene.
        UnityEngine.Debug.Log($"AfterTemplateInstantiation {sceneTemplateAsset.name} scene: {scene} isAdditive: {isAdditive} sceneName: {sceneName}");
    }
}
```

## Methods

| Method                                                                                                                                                 | Description                                                                                                             |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| [AfterTemplateInstantiation](/engine/6000.7/script-reference/unityeditor/scenetemplate/iscenetemplatepipeline/aftertemplateinstantiation.md)           | An event called after the Scene template is instantiated, and while the new scene is still loaded.                      |
| [BeforeTemplateInstantiation](/engine/6000.7/script-reference/unityeditor/scenetemplate/iscenetemplatepipeline/beforetemplateinstantiation.md)         | An event called before the Scene template is instantiated.                                                              |
| [IsValidTemplateForInstantiation](/engine/6000.7/script-reference/unityeditor/scenetemplate/iscenetemplatepipeline/isvalidtemplateforinstantiation.md) | An event called before the New Scene dialog is displayed to determine whether this template is available in the dialog. |
