Unity2021.2
からSourceGenerator
がつかえるようになりました。
しかしStringBuilder
をそのままつかうと整形がつらくてぽんぽんぺいんなのでシンプルなラッパークラスをつくりました。
既にSourceGenerator
をゴリゴリつかってるような有識者には役に立つものではないと思いますが、
これから始めたい人向けにシェアしようと思います。
C#ファイル1つの小さいコードですので落とすなりコピペするなりして使ってください。
以下のようなコードを記述することで
サンプル
using Tsukuru;
//~中略~
//インスタンスを作成
var cb = new CodeBuilder();
//コードを記述する
cb.AddCode("//Auto Generated Class");
//改行とインデントを行ったうえでコードを記述する
cb.NewLine("using UnityEngine;");
//スコープの記述
using (new BlockScope(cb, "internal class ExampleGeneratedClass"))
{
using (new BlockScope(cb, "internal static void ExampleGeneratedFunction()"))
{
cb.NewLine("Debug.Log(\"I am auto generated class!!\");");
}
}
cb.ToString();
以下のようなソースコードの文字列を生成できます。
生成されたコード文字列
//Auto Generated Class
using UnityEngine;
internal class ExampleGeneratedClass
{
internal static void ExampleGeneratedFunction()
{
Debug.Log("I am auto generated class!!");
}
}
using
によるIDisposable
の自動開放を利用することで生成されるコードと近いスコープ構造で記述できるようにしています。
Unity標準のGUILayout.VerticalScope
とかに近い手法です。