Unity x RiderでT4テンプレートを使う方法をまとめました。
- T4テンプレートの基本的な使い方はこちら
- Visual Studioとの相性の悪さ~RiderのT4テンプレートサポート
- C# Project Generationにttを加える
- テンプレートファイルを作る
- テキストを生成する
- 実行時テンプレートでコンパイルエラー?
- 関連
- 参考
Unity 2019.4.0
Rider 2020.1.3
T4テンプレートの基本的な使い方はこちら
T4テンプレートの基本的な使い方は以下の記事にまとめています。
Visual Studioによる使い方の記事になりますが文法などは変わらないのでこちらを参照してください。
本記事ではT4テンプレートをRiderで使う際にVisual Studioと異なる部分についてまとめます。
Visual Studioとの相性の悪さ~RiderのT4テンプレートサポート
上述の記事のようにT4テンプレートはVisual Studioで使用することができます。
しかし少なくとも今のバージョンのUnityは、VisualStudioのテキストテンプレートと相性が悪いです。
ためしにソリューションエクスプローラーからAssets直下にテキストテンプレートを作成してみます。
この時点ではテンプレートを書き換えて保存するとその結果がtxtファイルに書き出され、問題なく動作しているように見えます。
しかし、一度UnityエディタとVisual Studioを立ち上げなおすと以下のようにttファイルとtxtファイルの親子関係が解消されてしまっています。
この状態だとテンプレートを更新して保存してもtxtファイルが更新されません。 もちろん別のソリューションとして作る分には正常に動きます。
さてこのようなVisual Studioの事情に対して、Riderでは2019.3からT4テンプレートがサポートされました。
この記事ではRiderを使ってUnity上でT4テンプレートを使う方法についてまとめます。
C# Project Generationにttを加える
まずC# Project Generationにテンプレートファイルの拡張子であるttを追加します。
Project Settings > Editor > C# Project Generation > Additional extensions to include
にttを追加します。
またttファイルをUnityからダブルクリックした際にRiderが開くようにするため、
Preferences > External Tools > Extensions handled
にttを加えます。
テンプレートファイルを作る
それでは実際にテンプレートファイルを作っていきます。
テンプレートファイルを作るにはExplorerで右クリック > Add > T4 File
を選択します。
するとファイル名入力ウィンドウが表示されます。
ここでT4 Fileを選択するとttファイルが、T4 Includeを選択するとttincludeファイルが生成されます。
今回は以下のようなttファイルを作成しました。
<#@ template language="C#" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> public class Example { }
テキストを生成する
次にテンプレートからテキストを作成します。
テキストを生成するにはttファイルを右クリック > Run Templateを選択します。
ここでPreprocess Templateを選択すると実行時テンプレートが作成されます。
以下のようにttファイルの子としてcsファイルが生成されていれば成功です。
csファイルの中身を見るときちんとクラスが生成されていることが確認できました(デザイン時テンプレートの場合の結果)。
public class Example { }
実行時テンプレートでコンパイルエラー?
さて実行時テンプレートを生成した際に、System.CodeDom.Compiler
が見つからない旨のコンパイルエラーが出ることがあります。
これに関してはEditorフォルダやエディタ用のアセンブリに入れることで解決できます。
また、API Compatibility Levelを.NET 4.xにすることでも解決できます。