Version: Unity 6.0 (6000.0)
言語 : 日本語
Roslyn アナライザーとソースジェネレーター
既存のアナライザーまたはソースジェネレーターをインストールして使用する

ソースジェネレータを作成して使用する

ソースジェネレーターをスクリプトコンパイルプロセスの追加ステップとして使用し、既存のコードをコンパイルしながら新しいコードを追加できます。コードアナライザーと同様に、既存のソースジェネレーターを使用することも、独自に作成することもできます。

ノート: Unity は、System.Text.Json 名前空間のバージョン 6.0.0- プレビューのみをサポートします。アプリケーションでこの名前空間を使用する場合は、必ずバージョン 6.0.0-preview を使用してください。System.Text.Json の詳細については、Microsoft の System.Text.Json Namespace のドキュメント を参照してください。

Visual Studio でソースジェネレーターを作成し、Unity プロジェクトで使用するために適用する手順は、以下のとおりです。

  1. Visual Studio で、.NET Standard 2.0 をターゲットとする C# クラスライブラリプロジェクトを作成し、プロジェクトに ExampleSourceGenerator という名前を付けます。

  2. プロジェクトの Microsoft.CodeAnalysis.Csharp NuGet パッケージをインストールします。ソースジェネレーターが Unity で動作するには、Microsoft.CodeAnalysis.Csharp 4.3 を使用する必要があります。

  3. Visual Studio プロジェクトで、新しい C# ファイルを作成し、以下のコードを追加します。

    using Microsoft.CodeAnalysis;
    using Microsoft.CodeAnalysis.Text;
    using System.Text;
    
    namespace ExampleSourceGenerator
    {
        [Generator]
        public class ExampleSourceGenerator : ISourceGenerator
        {
            public void Execute(GeneratorExecutionContext context)
            {
                System.Console.WriteLine(System.DateTime.Now.ToString());
    
                var sourceBuilder = new StringBuilder(
                @"
                using System;
                namespace ExampleSourceGenerated
                {
                    public static class ExampleSourceGenerated
                    {
                        public static string GetTestText()
                        {
                            return ""This is from source generator ");
    
                sourceBuilder.Append(System.DateTime.Now.ToString());
    
                sourceBuilder.Append(
                    @""";
                        }
        }
    }
    ");
    
                context.AddSource("exampleSourceGenerator", SourceText.From(sourceBuilder.ToString(), Encoding.UTF8));
            }
    
            public void Initialize(GeneratorInitializationContext context) { }
        }
    }
    
  4. リリース用のソースジェネレーターをビルドします。これを行うには、Build に移動し、Batch Build オプションを選択し、Release オプションを選択して Build (ビルド) します。

  5. ソースジェネレーターのプロジェクトフォルダーで、bin/Release/netstandard2.0/ExampleSourceGenerator.dll ファイルを探します。

  6. このファイルを Unity プロジェクト内の Assets フォルダーにコピーします。

  7. アセットブラウザーで .dll ファイルをクリックし、Plugin Inspector ウィンドウを開きます。

  8. Select platforms for plugin で、Any Platform を無効にします。

  9. Include Platforms の下で、Editor と Standalone を無効にします。

  10. Asset Labels の下で、ラベルアイコンをクリックしてアセットラベルサブメニューを開きます。

  11. RoslynAnalyzer という新しいラベルを作成して割り当てます。それには、アセットラベルサブメニューのテキスト入力フィールドに RoslynAnalyzer と入力し、Enter キーを押します。このラベルは正確に一致する必要があり、大文字と小文字が区別されます。ラベルを作成すると、それ以降はアセットラベルサブメニューに表示されます。メニューでラベルの名前をクリックして、他のアナライザーに割り当てることができます。

  12. このソースジェネレーターは複数のアセンブリに挿入されるため、コンソールに警告が表示されます。上記の例の ExampleSourceGenerated を内部的にするか、名前自体を生成することで解決します。

  13. ソースジェネレーターの動作をテストするには、エディターで以下のコードを使用して 新しい MonoBehaviour スクリプトを作成 します。

    using UnityEngine;
    
    public class HelloFromSourceGenerator : MonoBehaviour
    {
        static string GetStringFromSourceGenerator()
        {
            return ExampleSourceGenerated.ExampleSourceGenerated.GetTestText();
        }
    
        // Start is called before the first frame update
        void Start()
        {
            var output = "Test";
            output = GetStringFromSourceGenerator();
            Debug.Log(output);
        }
    }
    
  14. このスクリプトをシーンのゲームオブジェクトに追加して、再生モードを開始します。ソースジェネレーターからのメッセージがコンソールウィンドウにタイムスタンプを含めて表示されます。このソースジェネレーターは複数のアセンブリに挿入されるため、コンソールには警告も表示されます。上記の例の ExampleSourceGenerated を内部的にするか、名前自体を生成することで解決します。

ソースジェネレーターの詳細については、Microsoft の Source Generators のドキュメント を参照してください。

追加リソース

Roslyn アナライザーとソースジェネレーター
既存のアナライザーまたはソースジェネレーターをインストールして使用する