6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

コード生成のためのユーティリティクラス

Last updated at Posted at 2023-02-18

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とかに近い手法です。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?