Version: 2021.3
言語: 日本語
シーンテンプレートの編集
シーンテンプレートの設定

新規シーン作成のカスタマイズ

Unity がテンプレートから新しいシーンをインスタンス化する際にカスタムコードを実行するには、Scene Template Pipeline スクリプトを作成し、テンプレートに接続します。テンプレートから新しいシーンを作成するたびに、Unity はパイプラインスクリプトの新しいインスタンスも作成します。

スクリプトをテンプレートに接続するには、以下を行います。

  1. テンプレートを検査して プロパティを編集 します。
  2. Scene Template Pipeline プロパティを設定して、Scene Template Pipeline スクリプトを指すようにします。

SceneTemplateAsset.templatePipeline メソッドを使用して、C# を使ってスクリプトをテンプレートに接続することもできます。

Scene Template Pipeline スクリプトは、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. New Scene DialogCreate をクリックします。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 イベントを発動させます。


シーンテンプレートの編集
シーンテンプレートの設定