ソースジェネレータを作成して使用する
Create a simple source generator and configure the Unity Editor to use it for your Unity project code.
読み終わるまでの所要時間 7 分最終更新 1ヶ月前
ソースジェネレーターをスクリプトコンパイルプロセスの追加ステップとして使用し、既存のコードをコンパイルしながら新しいコードを追加できます。コードアナライザーと同様に、既存のソースジェネレーターを使用することも、独自に作成することもできます。
ノート: Unity は、 名前空間のバージョン 6.0.0- プレビューのみをサポートします。アプリケーションでこの名前空間を使用する場合は、必ずバージョン を使用してください。 の詳細については、Microsoft の System.Text.Json Namespace のドキュメント を参照してください。
System.Text.Json6.0.0-previewSystem.Text.JsonVisual Studio でソースジェネレーターを作成し、Unity プロジェクトで使用するために適用する手順は、以下のとおりです。
-
Visual Studio で、.NET Standard 2.0 をターゲットとする C# クラスライブラリプロジェクトを作成し、プロジェクトにという名前を付けます。
ExampleSourceGenerator -
プロジェクトのNuGet パッケージをインストールします。ソースジェネレーターが Unity で動作するには、Microsoft.CodeAnalysis.Csharp 4.3 を使用する必要があります。
Microsoft.CodeAnalysis.Csharp -
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) { } }}
-
リリース用のソースジェネレーターをビルドします。これを行うには、Build に移動し、Batch Build オプションを選択し、Release オプションを選択して Build (ビルド) します。
-
ソースジェネレーターのプロジェクトフォルダーで、ファイルを探します。
bin/Release/netstandard2.0/ExampleSourceGenerator.dll -
このファイルを Unity プロジェクト内の Assets フォルダーにコピーします。
-
アセットブラウザーで .dll ファイルをクリックし、Plugin Inspector ウィンドウを開きます。
-
Select platforms for plugin で、Any Platform を無効にします。
-
Include Platforms の下で、Editor と Standalone を無効にします。
-
Asset Labels の下で、ラベルアイコンをクリックしてアセットラベルサブメニューを開きます。
-
RoslynAnalyzer という新しいラベルを作成して割り当てます。それには、アセットラベルサブメニューのテキスト入力フィールドにと入力し、Enter キーを押します。このラベルは正確に一致する必要があり、大文字と小文字が区別されます。ラベルを作成すると、それ以降はアセットラベルサブメニューに表示されます。メニューでラベルの名前をクリックして、他のアナライザーに割り当てることができます。
RoslynAnalyzer -
このソースジェネレーターは複数のアセンブリに挿入されるため、コンソールに警告が表示されます。上記の例のを内部的にするか、名前自体を生成することで解決します。
ExampleSourceGenerated -
ソースジェネレーターの動作をテストするには、エディターで以下のコードを使用して 新しい 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); }}
-
このスクリプトをシーンのゲームオブジェクトに追加して、再生モードを開始します。ソースジェネレーターからのメッセージがコンソールウィンドウにタイムスタンプを含めて表示されます。このソースジェネレーターは複数のアセンブリに挿入されるため、コンソールには警告も表示されます。上記の例のを内部的にするか、名前自体を生成することで解決します。
ExampleSourceGenerated
ソースジェネレーターの詳細については、Microsoft の Source Generators のドキュメント を参照してください。