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 の下で、EditorStandalone を無効にします。

  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 アナライザーとソースジェネレーター
既存のアナライザーまたはソースジェネレーターをインストールして使用する