ドキュメント

Unity Engine

Unity Engine

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

Create a simple source generator and configure the Unity Editor to use it for your Unity project code.
読み終わるまでの所要時間 7 分最終更新 1ヶ月前

ソースジェネレーターをスクリプトコンパイルプロセスの追加ステップとして使用し、既存のコードをコンパイルしながら新しいコードを追加できます。コードアナライザーと同様に、既存のソースジェネレーターを使用することも、独自に作成することもできます。
ノート: 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 のドキュメント を参照してください。

追加リソース